2 की सटीकता के साथ एक दशमलव के लिए सरल नियमित अभिव्यक्ति


271

2 की सटीकता के साथ एक दशमलव के लिए नियमित अभिव्यक्ति क्या है?

मान्य उदाहरण :

123.12
2
56754
92929292929292.12
0.21
3.1

अमान्य उदाहरण:

12.1232
2.23332
e666.76

दशमलव बिंदु वैकल्पिक हो सकता है, और पूर्णांक भी शामिल हो सकते हैं।


1
संबंधित: हज़ारवें विभाजक के साथ दशमलव के लिए, stackoverflow.com/questions/16148034/…
Yeo

1
सबसे अच्छा जवाब यहाँ है: stackoverflow.com/a/39399503/715269
गंगनुस

जवाबों:


397

कार्यान्वयन से मान्य रेगेक्स टोकन भिन्न होते हैं। एक सामान्य रूप है:

[0-9]+(\.[0-9][0-9]?)?

अधिक कॉम्पेक्ट:

\d+(\.\d{1,2})?

दोनों मान लेते हैं कि दोनों के दशमलव स्थान के पहले और बाद में कम से कम एक अंक है।

यह सुनिश्चित करने के लिए कि संपूर्ण स्ट्रिंग इस फॉर्म का एक नंबर है, अभिव्यक्ति को स्टार्ट और एंड टैग में लपेटें जैसे (पर्ल के फॉर्म में):

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

दशमलव से पहले एक अग्रणी अंक के बिना संख्याओं से मेल खाने के लिए ( .12) और 12.एक एकल अवधि ( .) के इनपुट को छोड़कर पूरे संख्या में एक अनुगामी अवधि ( ) होने के बाद, निम्नलिखित प्रयास करें:

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

जोड़ा गया

()?इसे वैकल्पिक बनाने के लिए आंशिक भाग को लपेटा गया । ध्यान रखें कि यह ऐसे रूपों को 12. शामिल करता है, जिसमें शामिल करना अधिक पसंद होगा ^\d+\\.?\d{0,2}$

जोड़ा गया

^\d{1,6}(\.\d{1,2})?$पुनरावृत्ति को रोकने के लिए उपयोग करें और दशमलव मान के पूरे भाग को प्रतिबंध दें।


4
गणितीय रूप से, मुझे लगता है कि एक सटीक 2 संख्या में हमेशा दो दशमलव होने चाहिए, भले ही अंतिम शून्य हो। यह महत्वपूर्ण आंकड़ों के साथ मेरे अनुभव पर आधारित है, इसलिए यह गलत हो सकता है, लेकिन आप वास्तव में नहीं जानते हैं कि 1.7 1.70 या 1.70 से 1.74 तक कोई संख्या है।
paxdiablo

धन्यवाद! वास्तव में मुझे क्या चाहिए था :) +1
एलेक्स

6
यह मैच 0001.00: /
रेडबैन

2
जोड़ा गया - '?' इसमें ^ \ d + (\। \ d {1,2})? $ ===> ^ -? \ d + (\। \ d {1,2})? $ का समर्थन करने के लिए -ve
मुरली मुरुगेसन

1
@ बिमलदास, आप के -?रूप में, के साथ अभिव्यक्ति उपसर्ग द्वारा नकारात्मक का समर्थन कर सकते हैं -?\d+(\.\d{1,2})?। मैंने नकारात्मक बिंदुओं को शामिल नहीं किया या दशमलव बिंदु से शुरू किया क्योंकि वे ओपी के प्रश्न में नहीं थे, हालांकि वे निश्चित रूप से अधिक सामान्य संख्या प्रारूप के लिए मान्य हैं। यहाँ टिप्पणी थ्रेड ".21" को संभालने के लिए कुछ तरीके देता है।
डॉकमैक्स

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

और चूंकि नियमित अभिव्यक्तियाँ पढ़ने के लिए भयानक हैं, बहुत कम समझ में आता है, यहाँ क्रिया समतुल्य है:

^                         # Start of string
 [0-9]+                   # Require one or more numbers
       (                  # Begin optional group
        \.                # Point must be escaped or it is treated as "any character"
          [0-9]{1,2}      # One or two numbers
                    )?    # End group--signify that it's optional with "?"
                      $   # End of string

आप सबसे नियमित अभिव्यक्ति कार्यान्वयन ( पीसीआरई , सबसे आम सहित ) के [0-9]साथ बदल सकते हैं । मैंने इसे छोड़ दिया है क्योंकि मुझे लगता है कि इसे पढ़ना आसान है।\d[0-9]

इसके अलावा, यहाँ सरल पायथन लिपि है जिसे मैंने इसे जाँचने के लिए प्रयोग किया है:

import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")

valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]

assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0

मुझे दशमलव से पहले अधिकतम 3 अंक चाहिए, इस तरह की कोई किस्मत नहीं के साथ की कोशिश की ^ ([0-9] {0,3}) + (\। [0-9] {1,2})? $
Raghurocks

3
@ रघुह्र्स +पहली क्लोजिंग परन के बाद निकालें ,^([0-9]{0,3})(\.[0-9]{1,2})?$
dbr

जावा उपयोगकर्ताओं के लिए: दशमलव को बचाना नहीं चाहिए।

3
क्या आप निश्चित हैं? यह संभवतः के \\.बजाय होना चाहिए \.क्योंकि .यह काम करेगा जैसा दिखेगा, लेकिन किसी भी चरित्र से मेल खाता है (न केवल दशमलव स्थान)। उदाहरण के लिए, दोनों 1z23और 1.23वैध माना जा सकता है अगर आप इसे बच नहीं है
DBR

@dbr शायद यही होना चाहिए। जावा ने सिर्फ अनुचित भागने की शिकायत की। हटाने कि "यह तय" (इसे बंद), योग्य। मुझे अभी पूरी तरह से इसका परीक्षण करने का मौका नहीं मिला है।

20

वैकल्पिक माइनस साइन को शामिल करने के लिए और संख्याओं को अलग करने के लिए 015( जैसे कि अष्टक संख्याओं के लिए गलत किया जा सकता है) लिखें:

-?(0|([1-9]\d*))(\.\d+)?

यह मेरे लिए दशमलव से पहले अल्फा की अनुमति दे रहा है। X.25
बंगालटाइगर

1
यह दशमलव स्थानों की संख्या को 2 तक सीमित नहीं करता है
दाऊद इब्न करीम

13

उन संख्याओं के लिए जिनमें एक हजारों विभाजक नहीं हैं, मुझे यह सरल, कॉम्पैक्ट रेगेक्स पसंद है:

\d+(\.\d{2})?|\.\d{2}

या, 2 की सटीकता तक सीमित नहीं है:

\d+(\.\d*)?|\.\d+

उत्तरार्द्ध
1
100
100.
100.74
100.7
0.7
.7
.72 से मेल खाता है

और यह खाली स्ट्रिंग (जैसे \ d *।? D *) से मेल नहीं खाता


7

: मैं करने के लिए दो दशमलव स्थानों के लिए इस एक का उपयोग
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$) गुजरता है:
.25
0.25
10.25
+0.25

पास नहीं:
-.25
०१.२५
1.
1.256


यह एक रिक्त मान भी पास करता है।
बंगालटाइगर

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

12.स्वीकृत जैसी चीजें करेंगे । यह वह नहीं है जो आमतौर पर स्वीकार किया जाता है, लेकिन यदि आपको "लचीला" होने की आवश्यकता है, तो यह एक रास्ता है। और निश्चित रूप से [0-9]इसके साथ प्रतिस्थापित किया जा सकता है \d, लेकिन मुझे लगता है कि यह इस तरह से अधिक पठनीय है।


5

इसे इस्तेमाल करे

 (\\+|-)?([0-9]+(\\.[0-9]+))

यह सकारात्मक और नकारात्मक संकेतों को भी अनुमति देगा।


3

मुख्य उत्तर गलत है क्योंकि यह वैध 5.या 5,इनपुट है

यह कोड इसे संभालता है (लेकिन मेरे उदाहरण में नकारात्मक संख्याएं निषिद्ध हैं):

/^[0-9]+([.,][0-9]{1,2})?$/;

परिणाम बलो हैं:

true => "0" / true => "0.00" / true => "0.0" / true => "0,00" / true => "0,0" / true => "1,2" true => "1.1" / सत्य => "1" / सत्य => "100" सत्य => "100.00" / सत्य => "100.0" / सत्य => "1.11" / सत्य => "1,11" / गलत => "-5" / गलत => "-0.00" / सच => "101" / गलत => "0.00.0" / सत्य => "0.000" / सत्य => "000.25" / गलत => .25 "। / true => "100.01" / true => "100.2" / true => "00" / false => "" 5. / गलत => "6," / सत्य => "82" / सत्य => "81,3" / सत्य => "



2

सामान्य रूप से, अर्थात असीमित दशमलव स्थान:

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$


1

क्या आपको खाते eमें लेने की आवश्यकता नहीं होगी e666.76?

साथ में

(e|0-9)\d*\d.\d{1,2)

नहीं, यह परियोजना के दायरे से बाहर होगा! धन्यवाद हालांकि, यह आसान है :)
user39221

1

मेरे उत्तर को भी जोड़ना, किसी को यह उपयोगी लग सकता है या सही मेरा भी हो सकता है।

function getInteger(int){
  var regx = /^[-+]?[\d.]+$/g;
  return regx.test(int);
}


alert(getInteger('-11.11'));


1

मैंने अपने प्रोजेक्ट के साथ एक कोशिश की। यह + | -संकेत के साथ संख्याओं की अनुमति देता है ।

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

0

Chrome 56 इस तरह के पैटर्न को स्वीकार नहीं कर रहा है (Chrome 56 टाइप कर रहा है 11.11। एक अतिरिक्त।) टाइप संख्या के साथ, प्रगति के रूप में पाठ का उपयोग करें।


0

यह प्रतिपादक के साथ दशमलव और 2 अंकों तक की अनुमति देगा,

^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$

डेमो


यह पूर्णांक से मेल नहीं खाता और न ही1.2e-10
पूर्ण

हाँ, आपके सुधार के लिए धन्यवाद। मैंने इसके केवल दशमलव संख्या के लिए सोचा था
नंबि_0915

([0-9]+)?बेहतर लिखा है \d*। अब यह मेल नहीं खाता 10e3। और ओपी 2 अंकों तक मैच करना चाहता है।
पूर्ण

-1
 function DecimalNumberValidation() {
        var amounttext = ;
            if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
            alert('Please enter only numbers into amount textbox.')
            }
            else
            {
            alert('Right Number');
            }
    }

फ़ंक्शन किसी भी दशमलव संख्या को मान्य करेगा मौसम संख्या में दशमलव स्थान हैं या नहीं, यह कहेंगे "राइट नंबर" अन्य बुद्धिमान "कृपया केवल संख्या को राशि टेक्स्टबॉक्स में दर्ज करें।" अलर्ट मैसेज आएगा।

धन्यवाद... :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.