अल्फ़ान्यूमेरिक, डैश और अंडरस्कोर लेकिन कोई स्थान नियमित अभिव्यक्ति जावास्क्रिप्ट की जाँच नहीं करता है


92

एक नियमित अभिव्यक्ति के खिलाफ इनपुट की जांच करने की कोशिश कर रहा है।

क्षेत्र को केवल अल्फ़ान्यूमेरिक वर्ण, डैश और अंडरस्कोर की अनुमति देनी चाहिए और रिक्त स्थान की अनुमति नहीं देनी चाहिए।

हालांकि, नीचे दिया गया कोड रिक्त स्थान की अनुमति देता है।

मैं क्या खो रहा हूँ?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
मुझे नीचे एंडी ई का जवाब पसंद है। इसके अलावा, आप त्वरित regex संपादन के लिए gskinner.com/RegExr चेकआउट करना चाह सकते हैं । यह ... बहुत प्यारा है।
पिक्सेलबॉय

जवाबों:


155

हालांकि, नीचे दिया गया कोड रिक्त स्थान की अनुमति देता है।

नहीं, यह नहीं है। हालाँकि, यह केवल 1 की लंबाई के साथ इनपुट पर मेल खाएगा। 1 से अधिक या इसके बराबर लंबाई वाले इनपुट के लिए, आपको +निम्न वर्ण की आवश्यकता होगी :

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

ध्यान दें कि न तो -(इस उदाहरण में) और न ही _भागने की आवश्यकता है।


16

यदि आप केवल बूलियन मान के इच्छुक हैं, तो आपको String.match लेकिन RegExp.prototyp.test (यानी /abc/.test("abcd")) के बजाय String.search () का उपयोग नहीं करना चाहिए । एंडी ई द्वारा दिए गए उत्तर के अनुसार आपको अपने चरित्र वर्ग को दोहराना होगा:

var regexp = /^[a-zA-Z0-9-_]+$/;

8
वास्तव में, आपको RegExp.prototype.testविधि का उपयोग करना चाहिए यदि आप केवल बूलियन में रुचि रखते हैं।
एंडी ई

7

यह सिंटेक्स उन उत्तरों की तुलना में थोड़ा अधिक संक्षिप्त है जो इस बिंदु पर पोस्ट किए गए हैं और वही परिणाम प्राप्त करते हैं:

let regex = /^[\w-]+$/;

1
एक नोट जोड़ने पर विचार करें कि आपका उत्तर अंतर्राष्ट्रीय पात्रों के लिए भी काम करता है। मुझे जावास्क्रिप्ट पर यकीन नहीं है, लेकिन इस काम को कोसने में: 'इको "एबीसी-डीई डीएएफ_घी" egrep -wo '(\ w | - | _) +'
इवान ओगई

4

मूर्खतापूर्ण त्रुटि हुई। इसलिए यहां पोस्ट करें, अगर किसी को यह उपयोगी लगता है

  1. -\._ - मतलब हाइफ़न, डॉट और अंडरस्कोर
  2. \.-_ - इसका मतलब है कि डॉट से लेकर अंडरस्कोर तक सभी संकेत

# 2 केवल तब लागू होता है जब यह चौकोर कोष्ठक में होता है अर्थात [\ _-_] डॉट से अंडरस्कोर तक की सीमा में एक चार होता है। लेकिन वर्ग कोष्ठक के बिना दोनों तीन प्रतीकों का एक क्रम हैं, और वे सिर्फ क्रम में भिन्न हैं।
erict

1

अंडरस्कोर से बच न जाएं। हो सकता है कि कुछ पागलपन हो।


1
तुमने ऐसा क्यों कहा? मुझे पता है कि अंडरस्कोर को भागने की जरूरत नहीं है , लेकिन मैंने कभी \_भी जावास्क्रिप्ट या किसी अन्य रेगेक्स स्वाद में समस्याएं पैदा करने के बारे में नहीं सुना है ।
एलन मूर

1
शुद्ध सट्टा। अभिव्यक्ति अन्यथा ठीक लग रही थी और किसी भी मामले में मिलान नहीं होना चाहिए, लेकिन मैंने इसे वहां फेंक दिया। शायद एक टिप्पणी एक जवाब नहीं होना चाहिए था।
डेविड


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