जांचें कि क्या कोई स्ट्रिंग JS में रेक्सक्स से मेल खाती है


750

मैं जावास्क्रिप्ट का उपयोग करना चाहता हूं (jQuery के साथ हो सकता है) कुछ क्लाइंट-साइड सत्यापन करने के लिए कि क्या एक स्ट्रिंग रेक्स से मेल खाता है:

^([a-z0-9]{5,})$

आदर्श रूप से यह एक ऐसी अभिव्यक्ति होगी जो सही या गलत थी।

मैं एक जावास्क्रिप्ट नौसिखिया हूँ, match()मुझे क्या करना चाहिए? यह जांचता है कि क्या स्ट्रिंग का एक हिस्सा एक रेग्क्स से मेल खाता है, न कि पूरी चीज से।


क्या आप एक पूर्ण मिलान चाहते हैं, या सिर्फ स्ट्रिंग में एक मिलान विकल्प है?
केरेक एसबी

1
एक पूरा मैच - मिलान विकल्प नहीं।
रिचर्ड

जवाबों:


1194

regex.test()यदि आप चाहते हैं कि बूलियन परिणाम का उपयोग करें :

console.log(/^([a-z0-9]{5,})$/.test('abc1')); // false

console.log(/^([a-z0-9]{5,})$/.test('abc12')); // true

console.log(/^([a-z0-9]{5,})$/.test('abc123')); // true

... और आप ()अपने regexp से निकाल सकते हैं क्योंकि आपको कैप्चर की कोई आवश्यकता नहीं है।


1
रेगेक्स में प्रारंभिक ^ क्या करता है?
13

8
@PedroD ^ का तात्पर्य भीख माँगना या से शुरू होता है
नागराजू

तो आप इसके विपरीत कैसे करेंगे? "शुरू नहीं होता है ..."
पेड्रो


3
@stackdave क्या आप जावा के बजाय जावास्क्रिप्ट के साथ काम कर रहे हैं?
sfarbota

176

उपयोग test()विधि:

var term = "sample1";
var re = new RegExp("^([a-z0-9]{5,})$");
if (re.test(term)) {
    console.log("Valid");
} else {
    console.log("Invalid");
}

3
ध्यान दें कि संस्करण के साथ RegExpचर मान को रेगेक्स स्ट्रिंग में इंजेक्ट करने की अनुमति मिलती है।
क्रिस्टोफ रूसो

2
में डबल कोट्स को दूर करने के लिए किया था new RegExp("^([a-z0-9]{5,})$")क्रम में बनाने के लिए यह काम
फैकंडो Colombier

98

आप इसका उपयोग कर सकते हैं match():

if (str.match(/^([a-z0-9]{5,})$/)) {
    alert("match!");
}

लेकिन test()लगता है जैसे आप यहाँ पढ़ सकते हैं ।

के बीच महत्वपूर्ण अंतर match()और test():

match()केवल तार के साथ काम करता है, लेकिन test()पूर्णांक के साथ भी काम करता है।

12345.match(/^([a-z0-9]{5,})$/); // ERROR
/^([a-z0-9]{5,})$/.test(12345);  // true
/^([a-z0-9]{5,})$/.test(null);   // false

// Better watch out for undefined values
/^([a-z0-9]{5,})$/.test(undefined); // true

किसी संख्या के साथ काम करने का कारण यह है क्योंकि संख्या को स्ट्रिंग में ले जाया जाता है, क्योंकि यह एक पैरामीटर के रूप में दिया जाता है जब यह एक स्ट्रिंग की उम्मीद कर रहा होता है। मैं इस व्यवहार पर भरोसा नहीं करेगा। यह आपके पर्यावरण के परीक्षण के कार्यान्वयन () पर निर्भर करता है। (मैच विफल हो जाता है क्योंकि संख्याओं का matchसदस्य नहीं है )। यदि आप इसे रेगेक्स ( String(123)उदाहरण के लिए) के साथ उपयोग करना चाहते हैं तो मैं स्पष्ट रूप से आपके नंबर को स्ट्रिंग में परिवर्तित कर दूंगा ।
ब्रॉन्जड्रैगन

मैच का उपयोग यहां किया जा सकता है, लेकिन यदि आप प्रदर्शन को देखते हैं, तो test30% बेहतर प्रदर्शन करते हैं, जब हम सिर्फ रेगेक्स से मिलान करने के लिए एक स्ट्रिंग को मान्य करना चाहते हैं और इसमें से सबस्ट्रिंग नहीं निकालते हैं।
आकांक्षा

@pmrotule हाँ, लेकिन इसका वर्णन मैच विवरण से पहले किया जाना चाहिए।
आकांक्षा

टेस्ट और मैच (और माचिस) के बीच सबसे महत्वपूर्ण अंतर यह है कि मैच सभी मैचिंग सब-स्ट्रिंग्स की एक सूची को वापस करने के लिए पसंद करता है, जबकि कोई भी होने पर केवल जांच करता है। में regex तरीकों की जाँच करें javascript.info/regexp-methods
जुआन Lanus

50

उपयोग करें /youregexp/.test(yourString)यदि आप केवल जानना चाहते हैं कि क्या आपका स्ट्रिंग regexp से मेल खाता है।


8

यहाँ एक उदाहरण है जो कुछ HTML टैग्स के लिए दिखता है इसलिए यह स्पष्ट है कि /someregex/.test()एक बूलियन देता है:

if(/(span|h[0-6]|li|a)/i.test("h3")) alert('true');

6
 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 let regexp = /[a-d]/gi;
 console.log(str.match(regexp));

2

आप यह कोशिश कर सकते हैं, यह मेरे लिए काम करता है।

 <input type="text"  onchange="CheckValidAmount(this.value)" name="amount" required>

 <script type="text/javascript">
    function CheckValidAmount(amount) {          
       var a = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
       if(amount.match(a)){
           alert("matches");
       }else{
        alert("does not match"); 
       }
    }
</script>


1

प्रयत्न

 /^[a-z\d]{5,}$/.test(str)


2
यह कोड केवल उत्तर पृष्ठ पर क्या नया मूल्य लाता है?
मिकमैकुसा

वर्तमान में यह सबसे छोटा समाधान है (regexp सरलीकरण के कारण)
कामिल Kiełczewski

1
साल पहले पोस्ट किए गए पैटर्न के 1 चरित्र को शेविंग करना। जम्हाई।
मिकमैकुसा

2
नीचे दिए गए उत्तर को 0-9कम करने के लिए एक टिप्पणी को छोड़ दें \d। ओह, और यह कि एक कब्जा समूह आवश्यक नहीं है।
मिकमैकुसा

1

मैं निष्पादन विधि का उपयोग करने की सलाह दूंगा जो यदि कोई मैच नहीं है तो अशक्त हो जाती है अन्यथा यह एक सहायक वस्तु देता है।

let case1 = /^([a-z0-9]{5,})$/.exec("abc1");
console.log(case1); //null

let case2 = /^([a-z0-9]{5,})$/.exec("pass3434");
console.log(case2); // ['pass3434', 'pass3434', index:0, input:'pass3434', groups: undefined]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.