सवाल जावास्क्रिप्ट में अल्फान्यूमेरिक चेक का सबसे अच्छा तरीका


क्या आप कृपया जेएसपी में एक इनपुट क्षेत्र पर अल्फा न्यूमेरिक चेक करने का सबसे अच्छा तरीका सुझा सकते हैं? मैंने अपना वर्तमान कोड संलग्न किया है और मुझे पता है कि यह बिल्कुल सही नहीं है :)

<script type="text/javascript">
  function validateCode(){
      var TCode = document.getElementById('TCode').value;
      for(var i=0; i<TCode.length; i++)
      {
        var char1 = TCode.charAt(i);
        var cc = char1.charCodeAt(0);

        if((cc>47 && cc<58) || (cc>64 && cc<91) || (cc>96 && cc<123))
        {

        }
         else {
         alert('Input is not alphanumeric');
         return false;
         }
      }
     return true;     
   }


76
2017-12-13 22:23


मूल


निर्भर करता है कि आप "सर्वश्रेष्ठ" को कैसे परिभाषित करते हैं। नीचे दिए गए अधिकांश उत्तर रेगेक्स का सुझाव देते हैं, जो प्रदर्शन करता है आपके मूल कोड से बहुत धीमी है। मैंने अपना कोड साफ़ करें थोड़ा सा, जो वास्तव में बहुत अच्छा प्रदर्शन करता है। - Michael Martin-Smucker


जवाब:


आप उपयोग कर सकते हैं यह regex  /^[a-z0-9]+$/i


74
2017-12-13 22:26



बेशक यह मानता है कि खाली स्ट्रिंग ("") मिलान नहीं किया जाना चाहिए। - zzzzBov
ñ पैटर्न में नहीं आता है हालांकि पूरी तरह से वैध यूटीएफ -8 चार। - Oybek
/ ^ [ए-जेड -9] + $ / i.test (टीसीओडी) - Alex V
एक नियमित अभिव्यक्ति का परीक्षण करना धीमा लगता है (क्रोम 36 में 66%) की तुलना में charCodeAt()। देख jsPerf तथा नीचे मेरा जवाब। - Michael Martin-Smucker
यह regex कुछ भाषाओं में इस्तेमाल विशेष चरित्र अक्षरों के साथ काम नहीं करता है, जैसे "ą", "ź", "ć" इत्यादि। - Rafał Swacha


उपयोग करने के लिए पूछने वाले के मूल झुकाव str.charCodeAt(i) नियमित अभिव्यक्ति विकल्प से तेज़ प्रतीत होता है। में जेएसपीआरएफ पर मेरा परीक्षण RegExp विकल्प क्रोम 36 में 66% धीमा करता है (और फ़ायरफ़ॉक्स 31 में थोड़ा धीमा)।

यहां मूल सत्यापन कोड का एक साफ़-अप संस्करण है जो एक स्ट्रिंग और रिटर्न प्राप्त करता है true या false:

function isAlphaNumeric(str) {
  var code, i, len;

  for (i = 0, len = str.length; i < len; i++) {
    code = str.charCodeAt(i);
    if (!(code > 47 && code < 58) && // numeric (0-9)
        !(code > 64 && code < 91) && // upper alpha (A-Z)
        !(code > 96 && code < 123)) { // lower alpha (a-z)
      return false;
    }
  }
  return true;
};

बेशक, पठनीयता जैसी अन्य विचार भी हो सकती हैं। एक लाइन नियमित अभिव्यक्ति निश्चित रूप से देखने के लिए सुंदर है। लेकिन यदि आप सख्ती से सख्ती से चिंतित हैं, तो आप इस विकल्प पर विचार करना चाहेंगे।


46
2017-08-17 18:26



प्रोग्रामर कोड के रूप से प्यार करते हैं, लेकिन आप इसकी आंतरिक सुंदरता देखते हैं। - Ziggy


आपको एक समय में ऐसा करने की ज़रूरत नहीं है। बस किसी भी के लिए एक परीक्षण करें नहीं अल्फा-न्यूमेरिक। यदि कोई पाया जाता है, तो सत्यापन विफल हो जाता है।

function validateCode(){
    var TCode = document.getElementById('TCode').value;
    if( /[^a-zA-Z0-9]/.test( TCode ) ) {
       alert('Input is not alphanumeric');
       return false;
    }
    return true;     
 }

यदि गैर अल्फा न्यूमेरिक के कम से कम एक मैच है, तो यह होगा return false


30
2017-12-13 22:52





इसे रेगेक्स के साथ जांचें।

जावास्क्रिप्ट regexen में POSIX चरित्र वर्ग नहीं है, तो आपको चरित्र श्रेणी मैन्युअल रूप से लिखना होगा:

if (!input_string.match(/^[0-9a-z]+$/))
  show_error_or_something()

यहाँ ^ मतलब स्ट्रिंग की शुरुआत और $ स्ट्रिंग का अंत है, और [0-9a-z]+ का मतलब है चरित्र से एक या अधिक 0 सेवा मेरे 9 या से a सेवा मेरे z

जावास्क्रिप्ट regexen पर अधिक जानकारी यहां: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions


27
2017-12-28 08:44



उपयोगकर्ता को "जादू स्ट्रिंग" देने के बजाए मूल रेगेक्स को समझाने और मार्गदर्शिका से जोड़ने के लिए +1। - Charles Burns
आपको ए-जेड जोड़ने की जरूरत है - inor
@inor आप केस असंवेदनशीलता निर्दिष्ट करने के लिए regex के अंत में 'i' जोड़ सकते हैं, यानी। /^[a-z0-9]+$/i और यह निचले और ऊपरी केस अक्षरों दोनों को कवर करेगा - LJH


    // On keypress event call the following method
    function AlphaNumCheck(e) {
        var charCode = (e.which) ? e.which : e.keyCode;
        if (charCode == 8) return true;

        var keynum;
        var keychar;
        var charcheck = /[a-zA-Z0-9]/;
        if (window.event) // IE
        {
            keynum = e.keyCode;
        }
        else {
            if (e.which) // Netscape/Firefox/Opera
            {
                keynum = e.which;
            }
            else return true;
        }

        keychar = String.fromCharCode(keynum);
        return charcheck.test(keychar);
    }

आगे की, यह लेख जावास्क्रिप्ट अल्फान्यूमेरिक सत्यापन को समझने में भी मदद करता है।


5
2017-12-29 04:27





मैं एक स्ट्रिंग प्रोटोटाइप विधि बनाउंगा:

String.prototype.isAlphaNumeric = function() {
  var regExp = /^[A-Za-z0-9]+$/;
  return (this.match(regExp));
};

फिर, उपयोग होगा:

var TCode = document.getElementById('TCode').value;
return TCode.isAlphaNumeric()

5
2018-01-04 18:30



रखरखाव जावास्क्रिप्ट: उन ऑब्जेक्ट्स को संशोधित न करें जिन्हें आपके पास नहीं है - SeinopSys
DJDavid98: मुझे नहीं लगता कि नियम "उन वस्तुओं को संशोधित न करें जो आपके पास नहीं हैं" यहां लागू होता है। जस्टिन स्ट्रिंग की क्षमताओं को विस्तारित कर रहा था, मौजूदा कार्यक्षमताओं को संशोधित नहीं कर रहा था। परिप्रेक्ष्य के लिए, सी # दुनिया में, जिसे एक विस्तार विधि का पूर्ण रूप से वैध उपयोग माना जाएगा। यहां तक ​​कि अगर कुछ दिन "String.isAlphaNumeric (): बूलियन" ब्राउज़र निर्माताओं द्वारा लागू किया जाएगा, न तो हस्ताक्षर और न ही कार्रवाई वास्तव में बदल जाएगी, इसलिए मैं इस विशेष उदाहरण में रखरखाव की कोई कमी नहीं देख सकता। कुछ ऐसा नियम है जो इस बात का तात्पर्य नहीं है कि इसमें कोई अपवाद नहीं है। - Risto Välimäki