सबसे पहले उत्तर:
यह #,###,##0.00
मेल खाता है:
^[+-]?[0-9]{1,3}(?:\,?[0-9]{3})*(?:\.[0-9]{2})?$
और यह #.###.##0,00
मेल खाता है:
^[+-]?[0-9]{1,3}(?:\.?[0-9]{3})*(?:\,[0-9]{2})?$
में शामिल होने से दो (वहाँ यह लिखने के लिए होशियार/कम तरीके हैं, लेकिन यह काम करता है):
(?:^[+-]?[0-9]{1,3}(?:\,?[0-9]{3})*(?:\.[0-9]{2})?$)
|(?:^[+-]?[0-9]{1,3}(?:\.?[0-9]{3})*(?:\,[0-9]{2})?$)
आप यह भी जांचने के लिए अंतिम कॉमा (या डॉट) में कैप्चरिंग समूह जोड़ सकते हैं कि किस का उपयोग किया गया था।
दूसरा उत्तर:
एलन एम द्वारा बताया के रूप में, अपने पिछले समाधान 11,111111.00
की तरह एक मूल्य के अस्वीकार करने के लिए जहां एक अल्पविराम याद आ रही है विफल हो सकता है, लेकिन अन्य नहीं है।
^[+-]?[0-9]{1,3}
(?:(?<comma>\,?)[0-9]{3})?
(?:\k<comma>[0-9]{3})*
(?:\.[0-9]{2})?$
यह कुछ स्पष्टीकरण के हकदार: कुछ परीक्षण करने के बाद मैं निम्नलिखित regex कि इस समस्या से बचा जाता है पर पहुंच गया
^[+-]?[0-9]{1,3}
से मेल खाता है पहले (1 से 3) अंक;
(?:(?<comma>\,?)[0-9]{3})?
वैकल्पिक अल्पविराम पर मिलान के बाद 3 अंकों के बाद, और 'अल्पविराम' नामक समूह में अल्पविराम (या एक की अयोग्यता) को कैप्चर करता है;
(?:\k<comma>[0-9]{3})*
पहले से उपयोग किए गए अल्पविराम के किसी भी दोहराव से मेल खाता है (यदि कोई है) 3 अंकों के बाद;
(?:\.[0-9]{2})?$
स्ट्रिंग के अंत में वैकल्पिक "सेंट" से मेल खाता है।
बेशक
, कि केवल #,###,##0.00
(नहीं #.###.##0,00
) को कवर किया जाएगा, लेकिन आप हमेशा regexes शामिल हो सकते हैं जैसे मैं ऊपर था।
अंतिम उत्तर:
अब, एक पूर्ण समाधान। केवल पठनीयता के लिए इंडेंटेशन और लाइन ब्रेक हैं।
^[+-]?[0-9]{1,3}
(?:
(?:\,[0-9]{3})*
(?:.[0-9]{2})?
|
(?:\.[0-9]{3})*
(?:\,[0-9]{2})?
|
[0-9]*
(?:[\.\,][0-9]{2})?
)$
और इस बदलाव को दर्शाता विभाजक इस्तेमाल किया:
^[+-]?[0-9]{1,3}
(?:
(?:(?<thousand>\,)[0-9]{3})*
(?:(?<decimal>\.)[0-9]{2})?
|
(?:(?<thousand>\.)[0-9]{3})*
(?:(?<decimal>\,)[0-9]{2})?
|
[0-9]*
(?:(?<decimal>[\.\,])[0-9]{2})?
)$
संपादित 1: "सेंट" अब वैकल्पिक हैं; संपादित 2: पाठ जोड़ा गया; संपादित करें 3: दूसरा समाधान जोड़ा गया; संपादित करें 4: पूरा समाधान जोड़ा गया; संपादित करें 5: शीर्षक जोड़ा गया; संपादित करें 6: जोड़ा कैप्चरिंग; संपादित करें 7: अंतिम उत्तर दो संस्करणों में टूट गया;
जिज्ञासा से बाहर, आपके पास कभी भी पैटर्न क्यों होगा: 11.111,111, जो वास्तविक मूल्य (111,111.11) – ennuikiller
के विपरीत है, यह बेवकूफ सबूत बनाने के लिए। ताकि उपयोगकर्ताओं को याद रखना पड़े कि सही पैटर्न क्या है – LuRsT
यह वास्तव में काफी स्मार्ट है, क्योंकि दुनिया में कई देश अल्पविरामक के रूप में अल्पविराम का उपयोग कर रहे हैं। एक सूची के लिए, यहां जांचें: http://en.wikipedia.org/wiki/Decimal_separator#Countries_using_Arabic_numerals_with_decimal_comma –