2009-01-08 5 views
6

से मेल नहीं खाता है jquery में कोई प्लगइन है जो किसी टेक्स्टबॉक्स में किसी इनपुट को दर्ज करने से रोकता है जो regexp पैटर्न से मेल नहीं खाता है। उदाहरण के लिए, मेरे पास भुगतान राशि दर्ज करने के लिए एक टेक्स्टबॉक्स है, मैं चाहता हूं कि उपयोगकर्ता टी केवल संख्याओं को दर्ज करने में सक्षम हो और। पाठ बॉक्स में, अन्य सभी इनपुट अभ्यस्त कोई असर पाठ बॉक्स पर ..jquery प्लगइन किसी भी इनपुट में प्रवेश करने से रोकने के लिए regexp

धन्यवाद

उत्तर

6

Masked Input Plugin

jQuery(function($){ 
    $("#paymentAmount").mask("9999.99"); 
}); 
+0

अपनी मदद करने के लिए, नहीं जा रहा है क्योंकि, नकाबपोश इनपुट एक मुखौटा है, जो एक नियमित अभिव्यक्ति –

+0

यदि आप के साथ मैच के लिए प्रारूप, लेकिन वास्तव में उपयोगी नहीं नियंत्रित करता है बनाता है कुछ अक्षरों को टेक्स्टबॉक्स में दर्ज करने की क्षमता को अक्षम करना चाहते हैं तो मास्क आपका सबसे अच्छा विकल्प है। आपके नियम कितने जटिल हैं कि आपको उनके लिए रेगेक्स की आवश्यकता है? – Bob

+0

बॉब सही है, अगर आप नियमित अभिव्यक्तियों पर जोर देते हैं तो जटिल चीजें कैसे प्राप्त हो सकती हैं, इसके लिए मेरा जवाब देखें। आप टेक्स्टबॉक्स तक पहुंचने से पहले कीडाउन घटनाओं के बेहतर संचालन के लिए भी meouw का जवाब भी शामिल कर सकते हैं, लेकिन इससे मामलों को और भी जटिल बना दिया जाता है। इनपुट मास्किंग शायद सबसे अच्छा है। –

1

कीबोर्ड घटनाओं के रूप में मुश्किल एक सा jQuery डॉक्स पर सुझाव दिया जाता है।

कुंजी की पहचान करना
जब आप किसी कुंजीपटल घटना को पकड़ने, आप को पता है जो कुंजी दबाने था चाह सकते हैं:
http://unixpapa.com/js/key.html
http://yehudakatz.com/2007/07/03/event-normalization-in-jquery-113/

कठिनाई यह है कि आप चिंता यह है। यदि ऐसा है, तो आप बहुत ज्यादा पूछ सकते हैं। यह ब्राउज़र असंगतताओं और बग की एक बहुत बड़ी गड़बड़ है।
ऊपर

सभी एक ही, पहली लिंक jQuery में मैं यह कर था से :

textBoxElement.keydown(function(e) { 
    var chr = String.fromCharCode(e.which); 
    if(!/[0-9.]/.test(chr)) { 
     e.preventDefault(); 
    } 
} 

यह भी दर्ज करते हैं, टैब, हटाने जैसे अन्य महत्वपूर्ण कुंजी को निष्क्रिय कर देगा, तो वे की जरूरत है सशर्त में जोड़ा जाना है। अन्य सभी कुंजियां प्रिंट करने योग्य नहीं हैं और इसलिए उन्हें पुनः प्राप्त नहीं किया जा सकता है, इसलिए आपको उनके e.keyCode की जांच करनी होगी। 13, 8 आदि

तुम कर सकते हो तुम रहे हैं वह बहुत regex की परवाह नहीं करते हैं

textBoxElement.keydown(function(e) { 
    switch(e.keyCode) { 
     case 48: //0 
     case 49: //1 
     case 50: //2 
     case 51: //3 
     case 52: //4 
     case 53: //5 
     case 54: //6 
     case 55: //7 
     case 56: //8 
     case 57: //9 
     case 48: //10 
     case 37: //left 
     case 39: //right 
     case 8: //tab 
     case 13: //return 
     case 46: //del 
     case 190: //. 
      return; 
    } 
    e.preventDefault(); 
}); 
1

मुझे नहीं लगता कि किसी भी तरह के प्लगइन आसानी से उपलब्ध है है की तरह कुछ। समस्या थोड़ा मुश्किल है, क्योंकि आपको उपयोगकर्ता को अपने रेगेक्स को लागू करने से पहले कुछ इनपुट टाइप करने की अनुमति देना है। यही है, आप केवल प्रत्येक char के खिलाफ मिलान नहीं कर सकते क्योंकि इसे टाइप किया गया है, जब तक कि आपका रेगेक्स केवल वर्णों के सेट को परिभाषित न करे।

उदाहरण के लिए, यदि वे भुगतान राशि दर्ज कर रहे हैं, और आप एकल-चरित्र आधार पर संख्याओं और दशमलवों की अनुमति देना चाहते हैं, तो उन्हें 99.99.23.42492 दर्ज करने से रोकता है?

दूसरी तरफ, यदि आप /\d+\.\d{2}/ जैसे पूर्ण रेगेक्स की आपूर्ति करते हैं, तो यह एक ही चरित्र पर बिल्कुल मेल नहीं खाएगा, आपको रेगेक्स को लागू करने से पहले कुछ अक्षर टाइप करने की अनुमति देनी होगी और यदि यह मेल नहीं खाता है तो उनके इनपुट को मिटा दें। वह निराशाजनक हो सकता है।

यदि आप वास्तव में इनपुट को फ़िल्टर करते समय फ़िल्टर करना चाहते हैं, तो आप पहले अक्षर के लिए अंक, फिर अंकों या दशमलव के प्रवेश के बाद दशमलव के लिए दशमलव की अनुमति देना चाहते हैं, और उसके बाद दो और अंक, और फिर कोई और इनपुट नहीं। यह एक सामान्य उद्देश्य फिल्टर नहीं है।

उदाहरण के लिए, यहां कुछ कोड है जो ऐसा करेंगे, लेकिन यह बहुत बदसूरत है।

myInput.keydown(function() { 
     var text = this.val 
     if(!/^\d/.test(text)) { 
      return ''; 
     } else { 
      done = text.match(/^(\d+\.\d\d)/); 
      if (done) { return done[0]; } 

      last_char = text.substr(text.length-1,1); 
      decimal_count = text.replace(/[^\.]/g,'').length; 

      if (decimal_count < 1) { 
      if (!/[\d\.]/.test(last_char)) { 
       return text.substr(0,text.length-1); 
      } 
      } else if (decimal_count == 1 && last_char == '.') { 
      return text; 
      } else { 
      if (!/[\d]/.test(last_char)) { 
       return text.substr(0,text.length-1); 
      } 
      } 
      return text; 
     } 
    }); 

और निश्चित रूप से, यदि वे "असली" टाइपिंग किए बिना कुछ मूल्यों में पेस्ट करना होता है तो यह काम नहीं करेगा।

शायद कुछ अन्य दृष्टिकोण आपके लिए बेहतर काम करेगा?फ़ील्ड को हाइलाइट करने और उपयोगकर्ता को इंगित करने की तरह यदि वे एक गैर-अंक, गैर-दशमलव दर्ज करते हैं, या यदि वे इनपुट को फ़िल्टर करने के बजाए एक से अधिक दशमलव दर्ज करते हैं, क्योंकि यह गन्दा लगता है।

0

यहाँ एक सरल jQuery विस्तार मैं का उपयोग करें:

jQuery.fn.DecimalMask = function() { 
    return this.each(function() { 
    $(this).keypress(function (e) { 
     var keynum; 
     if (window.event) // IE 
     { 
     keynum = e.keyCode; 
     } 
     else if (e.which) // Netscape/Firefox/Opera 
     { 
     keynum = e.which; 
     } 
     if (typeof keynum == 'undefined') return true; 
     else if (keynum == 46 && $(this).val().indexOf(".") > -1) return false; //already has a decimal point 
     else return ((keynum > 47 && keynum < 58) || keynum == 13 || keynum == 8 || keynum == 9 || keynum == 46 || keynum == 45); //allow ony number keys or keypad number keys 
    }); 
    }); 
}; 
//implementation 
$("#mytxtbox").DecimalMask(); 
संबंधित मुद्दे