2013-06-18 12 views
7

मैं दिनांक सत्यापन कर रहा हूं और अब मैं कर रहा हूं कि उपयोगकर्ता केवल numbers, / और backspace दर्ज कर सकता है, इसलिए अब मैं अपनी नियमित अभिव्यक्ति में 2 और कुंजी जोड़ना चाहता हूं। मैं जोड़ने के लिए delete और arrow keys तो क्या मैं अपने नियमित अभिव्यक्ति है इस में क्या करना चाहिए बदल जाएगा मेरी कोडनियमित अभिव्यक्ति में हटाएं और तीर कुंजी

<input type="text" id="date" name="date" onkeypress="check(event,this);" /> 

यह मेरे जावास्क्रिप्ट कोड है

<script type="text/javascript"> 

function check(evt, id) 
{ 

var value = id.value; 

var theEvent = evt || window.event; 
var key = theEvent.keyCode || theEvent.which; 
key = String.fromCharCode(key); 

var regex = /[0-9|\b|/]/; 

if(!regex.test(key)) 
{ 
    theEvent.returnValue = false; 

    if(theEvent.preventDefault) 
    theEvent.preventDefault(); 
} 
} 



</script> 

धन्यवाद आपकी मदद के लिए इंतज़ार कर रहा है चाहता हूँ।

+0

अगर आपको लगता है कर आपको समाधान मिला, मेरे उत्तरों में जोड़े गए नोट्स की जांच करें, वे आपके कोड को अपेक्षित रूप से कार्य करने में मदद कर सकते हैं। – CME64

उत्तर

9

आप इनपुट सत्यापन को छोड़ सकते हैं, तो तीर, हटाने और बैकस्पेस कुंजी दबाव डाला गया था

function check(evt, id) 
{ 

var value = id.value; 

var theEvent = evt || window.event; 
var key = theEvent.keyCode || theEvent.which; 

// Don't validate the input if below arrow, delete and backspace keys were pressed 
if(key == 37 || key == 38 || key == 39 || key == 40 || key == 8 || key == 46) { // Left/Up/Right/Down Arrow, Backspace, Delete keys 
    return; 
} 

key = String.fromCharCode(key); 
var regex = /[0-9|/]/; 

if(!regex.test(key)) 
{ 
    theEvent.returnValue = false; 

    if(theEvent.preventDefault) 
    theEvent.preventDefault(); 
} 
} 
+0

धन्यवाद मुझे यह मिला है –

+0

यह वास्तव में मुखौटा इनपुट करने का एक खराब तरीका है, क्योंकि कुंजीपटल एकमात्र तरीका नहीं है कि पाठ को किसी फ़ील्ड में दर्ज किया जा सके। वैसे भी, अगर यह आपके लिए काम करता है, तो आपको 'होम',' एंड', 'pgup',' pgdown' कुंजी 'जोड़ने की भी आवश्यकता होगी। – nickf

+0

यह कोड (, और%, के संकेतों के साथ काम नहीं करेगा, – hiew1

-1

मूल्य बनाने वाले कीप्रेसियों की बजाय आप तत्व के वास्तविक मूल्य की जांच क्यों नहीं करते हैं?

आप इसके लिए oninput ईवेंट का उपयोग कर सकते हैं।

+0

मैं उपयोगकर्ता को कुछ अक्षरों को जोड़ने के लिए इनपुट को प्रतिबंधित करना चाहता हूं –

+0

ऑनइनपुट ईवेंट पुराने ब्राउज़र (विशेष रूप से आईई 8) में समर्थित नहीं है और आईई 9 में इसकी काफी छोटी गाड़ी है। ऑनचेंज, ऑनपेस्ट और ऑनप्रोपर्टीएन्चेंज का कॉम्बो हालांकि कामकाज हो सकता है। –

+0

@AzamAlvi: यह वही है जो 'oninput' के लिए है। कुंजीपटलों की जांच के लिए आपका वर्तमान सुझाव उन तरीकों को शामिल नहीं करता है जिन्हें आप इनपुट (संभावित रूप से अमान्य) डेटा कर सकते हैं। उदाहरण के लिए, + पेस्ट राइट-क्लिक करें, ड्रैग + ड्रॉप टेक्स्ट, और इसी तरह। @roasted यदि पुराने ब्राउज़र के लिए समर्थन आवश्यक है, तो हाँ, आपको कुछ हैक्स करने की आवश्यकता होगी, लेकिन यह एक अच्छा जवाब नहीं है। – nickf

1

आप वर्तमान मूल्य की जाँच करने के परिवर्तन और बल परिवर्तन onkeyup पर इस्तेमाल करना चाहिए।

गलतियों तुम हो:

1- आपके regex, उलटा होना चाहिए तो अपने वर्तमान जांच करता है कि मूल्य इनमें से किसी भी शामिल है, लेकिन आप अपने मूल्य अन्य मूल्य नहीं करना चाहते हैं।

2- आपको इस तरह के स्लैश (/) चरित्र से बच जाना चाहिए ताकि इसे रेगेक्स के अंत के रूप में नहीं माना जाएगा और शेष संशोधक बन जाएंगे!

उदाहरण:

document.getElementById('date').onchange = function(){ 
    var regex = /[^\d\/]/g; 
    if(regex.test(this.value)) {console.log(false); return false;} 
    else {console.log(true); return true;} 
}; 

document.getElementById('date').onkeyup = function(){ 
    this.onchange(); 
}; 

DEMO

ध्यान दें: सुनिश्चित करें कि आप dd/mm/yyyy या जो कुछ भी अपने स्वरूप है के रूप में पूरे तारीख को मान्य, ठीक पहले sumission

संबंधित मुद्दे