2011-07-29 19 views
6

मैं सर्वर की ओर से उपयोगकर्ता का इनपुट जांचना चाहता हूं। उपयोगकर्ता एक नंबर 111111 या 22222 है जो एक ही नंबर, है में प्रवेश करती है, तो और भी इनपुट 12345 या 456789.RegEx यह जांचने के लिए कि क्या संख्या में अंक समान हैं या क्रम में

+0

8 9 10 के बारे में क्या? क्या यह एक 'अनुक्रम' है? –

+0

2335777 के बारे में क्या है, "अनुक्रम में" है? – Cephalopod

उत्तर

11

मिलान करने के लिए लगातार एक ही अंक की तरह अनुक्रम में है अगर:

^([0-9])\1*$ 

ध्यान दें कि आप बैकस्लैश से बचने के लिए जब आप इसे जावा स्ट्रिंग शाब्दिक में डालते हैं, उदाहरण के लिए "^([0-9])\\1*$"

दूसरे के लिए आपको | ऑपरेटर का उपयोग करके लगातार अंकों की एक सूची बनाना है। रेगेक्स 10-नेस्टेड परांथेस के साथ वास्तव में लंबा और बुरा होगा। किसी को प्रोग्राम का उपयोग करके इस रेगेक्स को उत्पन्न करना होगा। दूसरे शब्दों में, रेगेक्स का उपयोग करके हल करने में यह एक गलत समस्या है। लूप लिखना और इसका परीक्षण करना बहुत आसान होगा।

+0

हाँ, आप सही हैं। RegEx के साथ हल करना वास्तव में बुरा है। मैंने इसे लूप के लिए अच्छे पुराने दोस्त के साथ हल किया। मदद के लिए धन्यवाद। – yyy

+0

@ सुसामपाल, (4 साल बाद ...) ठंडा (+1)! कृपया दूसरे के लिए मेरा जवाब देखें। – JJoao

1

यह पैटर्न उपयोगकर्ता एक ही अंकों में प्रवेश करती है, तो मिलान हो जाएगा: तो नमूने का मिलान कि पहले अंक पूरी स्ट्रिंग के लिए दोहराया है कि क्या

^(\d)\1*$ 

\1, पहले कैप्चर समूह से मेल खाता है।

दूसरी समस्या (लगातार अंक) कुछ और मुश्किल है।

^(?:^(?:^(?:^(?:^0?1)?2)?3)4?)?5(?:$|6(?:$|7(?:$|8(?:$|90?))))$| 
    ^(0?1)?2(?:$|3(?:$|4))|^(6?7)?8(?:$|90?)$ 

एक या कार्यान्वयन है, जिसमें तीन या अधिक अंक हैं। लेकिन चूंकि संयोजनों की संख्या छोटा है, गणना (4 अंक) भी संभव है:

^(?:0?123(45?)?|1?23456?|2?34567?|3?45678?|4?56789?|(5?6)?7890?| 
     (0?1)?2345678?(90$)?|1?23456789?|2?345678(90?)?)$ 
यह सब

कहा, नियमित अभिव्यक्ति हमेशा इस प्रकार की समस्या के लिए अच्छी तरह से काम नहीं करते। इस अनुक्रम की जांच करने के लिए एक जावा विधि क्लीनर हो सकती है।

+0

दूसरा रेगेक्स "123", "345" इत्यादि जैसे तारों से मेल नहीं खाता है। ठीक है, अब मैं देखता हूं कि आपने "6 अंक" ग्रहण किए हैं। –

+0

धन्यवाद सुसम, मैंने देखा कि 6 अंकों की आवश्यकता नहीं थी और इसे अधिक सामान्य बनाने के लिए पोस्ट संपादित किया गया था। – drf

+0

जो हल करता है अगर संख्या 0 या 1 के साथ शुरू होती है तो मुझे लगता है। लूप के लिए बहुत उपयोगी था। Thanx बीटीडब्ल्यू। – yyy

0

पर्ल में इस बार, दूसरे मामले आसान व्याख्या करने के लिए:

perl -nlE 'say "BAD number" if ($_ =~ /^(\d)\1*$/ or "123456789" =~ /$_/)' 

स्पष्टीकरण:

  • मामले 1: इनपुट ∈ /(\d)\1*/ भाषा: पहले से ही प्रस्तुत ($_ =~ /^(\d)\1*$/)
  • मामले 2: स्ट्रिंग "123456789" मिलान इनपुट ("123456789" =~ /$_/)
संबंधित मुद्दे