2010-07-07 24 views
6

क्या कोई मुझे निम्नलिखित पैटर्न के लिए नियमित अभिव्यक्ति प्रदान कर सकता है?डॉलर की मात्रा से मेल खाने के लिए नियमित अभिव्यक्ति

$ 1234

$ 31234,3

$ 1234,56

$ 123456,78

$ .99

मेरे आवश्यकता दशमलव से पहले अंक 6 अधिक नहीं होनी चाहिए और दशमलव बिंदु के बाद ऐसा नहीं होना चाहिए है 2 अंकों से अधिक है। क्रिप्या मेरि सहायता करे। अग्रिम धन्यवाद ..

+0

मुझे लगता है कि दशमलव अंकों के लिए रेगेक्स शॉर्टकट/उपनाम हैं, इसलिए इन सभी सुझावों में [0-9] शामिल हो सकते हैं। –

+2

यह सच है और निश्चित रूप से ध्यान देने योग्य है। यदि शॉर्टकट से लंबा फॉर्म अधिक नहीं है तो मैं हमेशा अधिक स्पष्ट लोगों का उपयोग करना चाहता हूं। सफेद जगहों जैसे चीजों को पूरी तरह से लिखने के लिए परेशान करने के लिए, अल्फान्यूमेरिक प्रकारों के लिए मुझे लगता है कि इसका मतलब यह है कि वे रेगेक्स (और इसलिए चरित्र वर्ग शॉर्टकट) के लिए कम इस्तेमाल किए जाने वाले लोगों के लिए एक नज़र में पढ़ने योग्य हैं। – Chris

+0

कोई ऋणात्मक डॉलर की रकम नहीं, उदाहरण के लिए, धनवापसी? –

उत्तर

9
^\$(?=.*\d)\d{0,6}(\.\d{1,2})?$ 

(?=.*\d) यकीन है कि वहाँ स्ट्रिंग में कम से कम एक अंकों बनाता है। इसके बिना, regex ^\$\d{0,6}(\.\d{1,2})?$ स्ट्रिंग $ से मेल खाएगा।

बीटीडब्ल्यू, लुकहेड इस लंबे समय तक नहीं होना चाहिए; यहां तक ​​कि एक साधारण (?=.) ऐसा करेगा, क्योंकि रेगेक्स सुनिश्चित करता है कि बाद के वर्ण वास्तव में मान्य हैं। इस प्रकार, यह

^\$(?=.)\d{0,6}(\.\d{1,2})?$ 
+1

पहले दशमलव मैच में (? =। */D) ओवर/डी {1,6} का उपयोग करने का क्या फायदा है? मुझे लगता है कि मैं यहाँ कुछ याद कर रहा हूँ। – Lazarus

+1

@Lazarus '\ d {1,6}' दशमलव बिंदु से कम से कम एक अंक की आवश्यकता है - यह '$ .99' – Amarghosh

+0

से मेल नहीं खाएगा अच्छा बिंदु, अच्छा :) इसके लिए धन्यवाद। – Lazarus

4
^\$[0-9]{0,6}(\.[0-9]{1,2})?$ 
+0

आपको उस दशमलव डॉट से बचने की आवश्यकता होगी - अब यह कुछ भी मेल खाएगा। –

+0

अच्छा बिंदु। धन्यवाद। यह आश्चर्यजनक है कि मैं कितनी बार ऐसा करता हूं और कैसे मैं कभी भी ध्यान नहीं देता क्योंकि यह एक बिंदु से मेल खाता है ... ;-) – Chris

+0

क्या आप कुछ और से बचने के लिए भी भूल नहीं रहे हैं? @ हंस – Amarghosh

1
/^\$([0-9]{0-6})|^\$([0-9]{0-6})+\.([0-9]{0-2})$|\$\.([0-9]{0-2})$/ 
2

को सरल किया जा सकता पैटर्न होगा: किसी भी अंक तो देखते हैं कि

^\$\d{0,6}(\.\d{0,2})?$ 

यह सत्यापित नहीं करता "$।" एक वैध मैच है और एक वैध परिणाम प्रश्नकर्ता की मूल आवश्यकताओं को दिया गया है।

व्याख्या करने के लिए:

^ का मतलब तभी स्ट्रिंग मैं तलाश कर रहा हूँ से पहले कुछ भी नहीं है से मेल खाते हैं, यानी "USD $ 123.45" $ (\$ के साथ मिलान) के रूप में इस उदाहरण में विफल हो जाएगा नहीं है स्ट्रिंग की शुरुआत के तुरंत बाद।

\$ $ वर्ण से मेल खाता है, बैकस्लैश() का उपयोग भागने के लिए कहा जाता है और इसका उपयोग इस मामले में आरक्षित पात्रों (जिसका मतलब नियमित अभिव्यक्ति के संदर्भ में कुछ है) से मेल खाता है, जिसका मतलब है कि मिलान करें स्ट्रिंग के अंत, यानी कोई वर्ण इस बिंदु के बाद

\d किसी भी दशमलव चरित्र से मेल खाएगी, यानी 0-9

{n,m} पिछले तत्व के मीटर तक आपको n से मिलान करता है, यदि n 0 है तो कर रहे हैं इसका प्रभावी अर्थ यह है कि मैच वैकल्पिक है।

\. दशमलव बिंदु से मेल खाते हैं, यह के रूप में बच गए है। नियमित अभिव्यक्ति अर्थ मैच में एक आरक्षित वर्ण किसी भी चरित्र

(...) नियमित भीतर एक साथ एक समूह के रूप में, वहाँ अन्य परिणाम हैं, लेकिन मैं आप के लिए है कि पता लगाने के लिए छोड़ देंगे निहित अभिव्यक्ति लाता है।इस उदाहरण में यह नियमित अभिव्यक्ति

? पिछले तत्व के 0 या 1 से मेल खाएगा (इस मामले में समूह जो दशमलव बिंदु और 2 दशमलव वर्णों को देखता है, में अगले वर्ण के लाभ के लिए पूरी तरह से है, इसलिए हम उम्मीद करते हैं कि पिछली वर्णों (0 घटनाएं) या दशमलव दशमलव बिंदु (1 घटना) के साथ दशमलव बिंदु नहीं होने की उम्मीद है)

$ स्ट्रिंग के अंत से मेल खाता है, वहां कोई वर्ण नहीं हो सकता है इस बिंदु के बाद स्ट्रिंग।

+0

ओपी के अंतिम उदाहरण – Amarghosh

+0

@ अमरमोश से मेल नहीं खाता है। – Lazarus

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

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