2011-10-07 13 views
35

साथ अक्षरांकीय के लिए मैं एक regex हैRegex कम से कम 1 संख्या और 1 चरित्र

/^([a-zA-Z0-9]+)$/

यह सिर्फ केवल अक्षर या अंक की अनुमति देता है, लेकिन यह भी अगर मैं केवल संख्या (एस) या केवल चरित्र डालने (एस) तो यह भी इसे स्वीकार करता है। मैं इसे काम करना चाहता हूं जैसे फ़ील्ड को केवल अल्फान्यूमेरिक मानों को स्वीकार करना चाहिए लेकिन मान में कम से कम 1 वर्ण और 1 संख्या होनी चाहिए।

उत्तर

62

क्यों पहले पूरे परीक्षण को लागू नहीं करते हैं, और फिर वर्णों और संख्याओं के लिए व्यक्तिगत परीक्षण जोड़ें?

/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/ 
+2

यह नीचे दिए गए समाधान से बेहतर है: यदि आप एक हाइफ़न और अंडरस्कोर चेक जोड़ना चाहते हैं, तो यह अभी भी चारों ओर काम करेगा। पूर्व: '^ (? =। * [0-9]) (? =। * [Az]) ([a-z0-9 _-] +) $' abc-d12345 – Sababado

+1

उत्तर और स्पष्टीकरण के लिए बहुत बहुत धन्यवाद सोचने का तरीका – merveotesi

+0

@ सबाबादो _ - समाधान के लिए धन्यवाद :-) – Rahi

16

यह आरई करना होगा:

/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i 

आरई का स्पष्टीकरण:

  • मैच निम्नलिखित में से किसी:
    1. कम से कम एक संख्या है, तो एक पत्र या
    2. कम से कम एक अक्षर, फिर एक नंबर प्लस
  • कोई शेष संख्या और अक्षरों

  • (?:...) एक unreferenced समूह
  • /i, उपेक्षा दर-मामला झंडा है बनाता है ताकि a-z == a-zA-Z
+0

क्यों हम इस में मामले की संवेदनशीलता की जरूरत है? –

+0

अंत में/मैं इसे केस-असंवेदनशील बनाता है। – Kasaku

+0

अपने कोड में, आपने 'a-zA-Z' का उल्लेख किया है। मैंने कल कुछ परीक्षण किया है, और यह अनुमान लगाया है कि '/ [a-z]/i''/[a-zA-Z]/'से थोड़ा तेज है। देखें: http://jsperf.com/regexp-a-z-i-vs-a-za-z –

13

मैं देख सकता है कि अन्य प्रतिसाददाताओं आप एक पूर्ण समाधान दे दिया है: वैसे भी, अगर तुम यह सब एक regexp में क्या करना चाहते हैं, सकारात्मक अग्रदर्शी का उपयोग करें। रेगेक्स के साथ समस्या यह है कि उन्हें बनाए रखना/समझना मुश्किल हो सकता है।

आपके मौजूदा रेगेक्स को बनाए रखने के लिए एक आसान समाधान होगा, फिर अपने "कम से कम एक वर्णमाला" और "कम से कम एक संख्यात्मक" के परीक्षण के लिए दो नए regexes बनाएं।

तो, यह के लिए परीक्षण: -

/^([a-zA-Z0-9]+)$/ 

फिर इस: -

/\d/ 

फिर इस: -

अपने स्ट्रिंग तीनों regexes गुजरता
/[A-Z]/i 

हैं, तो आपके पास आपको जिस जवाब की आवश्यकता है

+0

मुझे वास्तव में इसकी सादगी पसंद है। पढ़ने और बनाए रखने के लिए बहुत आसान है। –

2

हो सकता है कि थोड़ी देर हो चुकी है, लेकिन यह मेरा आरई है:

/^(\w*(\d+[a-zA-Z]|[a-zA-Z]+\d)\w*)+$/

स्पष्टीकरण:

\w* -> 0 या अधिक अल्फ़ा-न्यूमेरिक डिजिट, शुरुआत

\d+[a-zA-Z]|[a-zA-Z]+\d पर -> एक अंक + एक पत्र या एक पत्र + अंक

\w* -> 0 या अधिक अल्फ़ा-न्यूमेरिक डिजिट, फिर

मुझे आशा है कि यह समझ में आता है

3

यह समाधान कम से कम 1 संख्या और कम से कम 1 को स्वीकार करता था चरित्र:

[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*)) 
3

जबकि स्वीकार किए जाते हैं जवाब सही है, मैं इस regex लगता है पढ़ने के लिए बहुत आसान:

REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*" 
1

और नकारात्मक जांच वाला एक विचार।

/^(?!\d*$|[a-z]*$)[a-z\d]+$/i 
  • ^(?! शुरू look ahead पर यदि स्ट्रिंग नहीं
  • \d*$ केवल अंक | या
  • [a-z]*$ केवल अक्षर
  • [a-z\d]+$ मैचों में एक या अधिक अक्षर या अंक $ अंत तक शामिल होते हैं करता है।

Have a look at this regex101 demo

(i flag turns on caseless matching: a-z मैचों a-zA-Z)

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