2012-08-29 11 views
8

मैं उपयोगकर्ता 0-20 रेंज में संख्या दर्ज करने बनाना चाहते और वे दोनों प्रवेश कर सकते हैं 01 और 1नियमित अभिव्यक्ति रेंज में केवल संख्या अनुमति देने के लिए 1-20

इस

क्या मैं अब तक किया है

/^[1-9]|0[1-9]|1[0-9]|2[0]$/ 

लेकिन यह काम नहीं करता है।

उत्तर

8

समस्या |^ और $ की तुलना में कम पूर्वता है, तो अपने पैटर्न का मतलब ^[1-9]या0[1-9]या1[0-9]या2[0]$ है जो: केवल एकल अंक मूल्यों ^ द्वारा प्रतिबंधित कर रहे हैं, और केवल 20 प्रतिबंधित है $ द्वारा।

आप ^ और $ को दोहरा सकते हैं या तो प्रत्यावर्तन की प्रत्येक शाखा में, वरना (?:...) में प्रत्यावर्तन लपेट एक गैर पर कब्जा करने उपसूचक बनाने के लिए:

/^[1-9]$|^0[1-9]$|^1[0-9]$|^20$/ 
/^(?:[1-9]|0[1-9]|1[0-9]|20)$/ 

(मैं भी बदलने की स्वतंत्रता लिया है [0] से 0।)

+0

इससे आज मेरी मदद मिली ... धन्यवाद :) – AbdulAziz

+0

@AbdulAziz: आपका स्वागत है! :-) – ruakh

3

कोशिश इस

/^([01]?\d|20)$/ 

0 या 1 (वैकल्पिक) कम से कम एक अंक की या 20

+0

यह 00 की अनुमति देगा। क्या इसे प्रतिबंधित किया जाना चाहिए? –

+1

यदि 00 की अनुमति नहीं है/^ (0 [1-9] | 1 \ डी | 20) $/ –

+0

धन्यवाद यह अब काम करता है। –

6

कैसे के बारे में

/^([0-1]?[0-9]|20)$/ 

समस्या यह है कि 20 एक विशेष मामला है है। दूसरे खंड में इसे शामिल किया गया है। पहला खंड बाकी को शामिल करता है। मैं पर्ल-शैली नियमित अभिव्यक्तियों को मान रहा हूं, क्योंकि आपने संदर्भ निर्दिष्ट नहीं किया है।

+0

क्या आप मुझे बता सकते हैं कि मेरे कोड में क्या गलत है? मैंने आज सुबह खुद ही रेगेक्स सीखा। –

+1

अपने उत्तर में निर्दिष्ट खंडहर के रूप में, यह एक प्राथमिक बात है - यह सुनिश्चित करने के लिए कि आपको '^' और '$' चिह्न की शेष अभिव्यक्ति की तुलना में कम प्राथमिकता है, आपको ब्लॉक को संश्लेषित करने की आवश्यकता होगी। –

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