2011-10-30 15 views
6

मेरे पास एक टेक्स्ट बॉक्स है, इसमें 1 या 1,2 या 1,225,345,21 यानी कई मान हो सकते हैं। लेकिन अब मैं इस इनपुट को प्रमाणित करना चाहता हूं।अल्पविराम से अलग संख्या के जावास्क्रिप्ट सत्यापन के लिए RegEx

toString().match(/^(([0-9](,)?)*)+$/) 

यह कोड मैं उपयोग कर रहा हूं। यह केवल सही मान्य है, लेकिन एक समस्या है जब उपयोगकर्ता इस तरह मान दर्ज:

inputval:1,22,34,25,645(true) 
inputval:1,22,34,25,645,(falues) 

उपयोगकर्ता अल्पविराम में प्रवेश करती है (,) पिछले के रूप में यह एक त्रुटि फेंक देना चाहिए।

क्या कोई मेरी मदद कर सकता है?

उत्तर

21

बस मैन्युअल रूप से कम से कम एक में शामिल हैं:

/^[0-9]+(,[0-9]+)*$/ 
2

:-)

/^(([0-9]+)(,(?=[0-9]))?)+$/ 

, एरियल के Regex पर वेरिएंट अंक के (?=[0-9]) द्वारा पालन किया जाना चाहिए।

या

/^(([0-9]+)(,(?!$))?)+$/ 

, स्ट्रिंग (?!$) के अंत तक का पालन नहीं किया जाना चाहिए।

/^(?!,)(,?[0-9]+)+$/ 

हम जांच कर लें कि पहला वर्ण कोई ,(?!,) नहीं है और फिर हम अंक से पहले वैकल्पिक , डाल दिया। यह वैकल्पिक है क्योंकि अंकों के पहले ब्लॉक को इसकी आवश्यकता नहीं है।

+0

मैं '(x + y?) +' पैटर्न पूरी तरह से छोड़ दूंगा - यह आसानी से [आपदाजनक बैकट्रैकिंग] (http://www.regular-expressions.info/catastrophic.html) की ओर जाता है। – Kobi

+0

@ कोबी हमेशा की तरह, आप क्या कर सकते हैं और रेगेक्स के साथ आपको क्या करना चाहिए :-) – xanatos

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