2011-06-07 14 views
8

है मैं इस तरहREGEX अल्पविराम के द्वारा अलग संख्या को स्वीकार करने के लिए, लेकिन संख्या श्रेणी 0-32,767

23,456,22,1,32767 

यानी

  1. कोई अल्पविराम के शुरू में अनुमति दी इनपुट लेने के लिए एक नियमित अभिव्यक्ति लिखने की ज़रूरत या अंत।
  2. रिक्त स्थान पहले और/या अल्पविराम के लिए शुरू हो सकते हैं उदा। 23, 45,56, 67 आदि
  3. प्रत्येक संख्या के रेंज 0-32767 होना चाहिए।

वर्तमान में मैं इस [0-9]+(,[0-9]+)* जैसी नियमित अभिव्यक्ति का उपयोग कर रहा हूं।

यह केवल अल्पविरामों से अलग संख्याओं की अनुमति देता है (रिक्त स्थान की अनुमति नहीं देता है), और यह संख्या की सीमा की जांच नहीं करता है।

+2

आप रेगेक्स के साथ संख्या सीमा को देखना नहीं चाहते हैं, तो यह रिले अपठनीय – stema

+0

होगा http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two -problems.html – Johnsyweb

उत्तर

15

शायद यह दो चरणों में करना बुद्धिमानी है। सबसे पहले देखें कि रेंज 0-99999 है:

^[0-9]{1,5}(*, *[0-9]{1,5})*$ 

तो एक सामान्य प्रयोजन प्रोग्रामिंग भाषा के उपयोग पूर्णांकों की एक सूची के लिए स्ट्रिंग पार्स और जाँच लें कि प्रत्येक के लिए पूर्णांक x x <= 32767

+1

+1, लेकिन आप बसमा के रूप में रिक्त स्थान की अनुमति देने के लिए अल्पविराम के आसपास '\ s *' जोड़ना चाहेंगे। –

+0

"\ s *" या "*"? सवाल इस बिंदु पर बहुत अस्पष्ट लगता है। –

+1

वह रिक्त स्थान कहता है, इसलिए मैं रिक्त स्थान के लिए जाऊंगा ... – Benjol

9

आप एक regex के साथ एक नंबर रेंज मान्य कर सकते हैं, लेकिन जब से आप संख्या की शाब्दिक प्रतिनिधित्व को देखने के लिए की जरूरत है, regex को पढ़ने के लिए मुश्किल हो जाएगा:

0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9]) 

0 के बीच एक पूर्णांक से मेल खाता है और 32767, वैकल्पिक अग्रणी शून्य के साथ।

तो अपने पूरे regex

^0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9])(?: *, *0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9]))*$ 

होगा अब कल्पना आप एक सह कार्यकर्ता जो आपकी कंपनी साल पहले छोड़ दिया है से कि regex वारिस ... मज़ा :)

इसलिए है, ले मार्क सलाह।

यह उत्तर पूरी तरह से शैक्षिक उद्देश्यों के लिए है और इस मामले में रेगेक्स का उपयोग करने की सिफारिश का गठन करता है।

+0

ठीक है टिम, धन्यवाद :) – Basmah

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