2 hassasiyetle ondalık sayı için basit düzenli ifade


271

2 hassasiyetli bir ondalık basamak için normal ifade nedir?

Geçerli örnekler :

123.12
2
56754
92929292929292.12
0.21
3.1

Geçersiz örnekler:

12.1232
2.23332
e666.76

Ondalık nokta isteğe bağlı olabilir ve tamsayılar da dahil edilebilir.


1
İlgili: bininci ayırıcı ile ondalık için bkz. Stackoverflow.com/questions/16148034/…
Yeo

Yanıtlar:


397

Geçerli normal ifade jetonları uygulamaya göre değişir. Genel bir form:

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

Daha kompakt:

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

Her ikisi de ondalık basamaktan önce ve onda bir basamaktan sonra en az bir basamak olduğunu varsayar.

Tüm dizenin bu formun bir sayısı olmasını zorunlu kılmak için, ifadeyi başlangıç ​​ve bitiş etiketlerine (Perl biçiminde) gibi sarın:

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

Ondalık basamaktan ( .12) önce öndeki basamağı olmayan sayıları ve 12.tek bir nokta ( .) girdisini hariç tutarken izleyen nokta ( ) içeren tam sayıları eşleştirmek için aşağıdakileri deneyin:

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

Katma

()?İsteğe bağlı hale getirmek için kesirli kısmı sarın . Bunun, 12. Dahil Etme gibi formların daha çok benzeyeceğini unutmayın ^\d+\\.?\d{0,2}$.

Katma

Kullanım ^\d{1,6}(\.\d{1,2})?$tekrarını durdurmak ve ondalık değerin tümünün kısmına bir kısıtlama vermek.


4
Matematiksel olarak, bir doğruluk 2 sayısının son sıfır olsa bile her zaman iki ondalık sayıya sahip olması gerektiğini düşünüyorum. Bu önemli rakamlarla olan tecrübelerime dayanıyor, bu yüzden yanlış olabilir, ancak 1.7'nin 1.70 mi, yoksa 1.70'den 1.74'e kadar herhangi bir sayı mı olduğunu bilmiyorsunuz.
paxdiablo

Teşekkürler! Tam olarak ihtiyacım olan şeydi :) +1
alex

6
bu maç 0001.00 ile eşleşen: /
redben

2
Katma '-?' ^ \ d + (\. \ d {1,2})? $ ===> ^ -? \ d + (\. \ d {1,2})? $
-ve'yi

1
@BimalDas, ifadeyi olduğu -?gibi önek ekleyerek negatifleri destekleyebilirsiniz -?\d+(\.\d{1,2})?. Daha genel bir sayı biçimi için kesinlikle geçerli olmalarına rağmen, OP'nin sorusunda olmadığı için negatifler veya ondalık bir nokta ile başlamam. Buradaki yorumlar dizisi ".21" ile başa çıkmak için birkaç yol sunar.
DocMax

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

Ve düzenli ifadeler okumak korkunç olduğu için, çok daha az anlıyorum, işte ayrıntılı eşdeğer:

^                         # 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

Sen yerini alabilir [0-9]ile \d(dahil çoğu düzenli ifade uygulamalarda PCRE'nin en ortak,). Ben bıraktım [0-9]ben okumak daha kolay düşünüyorum.

Ayrıca, kontrol etmek için kullandığım basit Python betiği:

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

Ondalıktan önce en fazla 3 hane istiyorum, şanssız denedim ^ ([0-9] {0,3}) + (\. [0-9] {1,2})? $
Raghurocks

3
@Raghurocks +İlk kapanış pareninden sonra kaldırın ,^([0-9]{0,3})(\.[0-9]{1,2})?$
dbr

Java kullanıcıları için: ondalık sayıdan kaçınılmamalıdır.

3
@Gracchus Emin misin? Muhtemelen bunun \\.yerine olmalı \.çünkü .işe yarayacak gibi görünecek, ancak herhangi bir karakterle eşleşecek (sadece ondalık basamakla değil). Örneğin, her iki 1z23ve 1.23bunu kaçmak yoksa geçerli düşünülebilecek
dbr

@dbr Belki de böyle olmalı. Java yanlış kaçıştan yakındı. Bunu "düzelt" i (kapat), lol. Henüz tam olarak test etme şansım olmadı.

20

İsteğe bağlı eksi işareti eklemek ve 015(sekizli sayılarla karıştırılabilen) gibi sayılara izin vermemek için şunu yazın:

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

Bu benim için ondalık sayıdan önce alfaya izin veriyor. İzin verir X.25
BengalTigger

1
Bu, ondalık basamak sayısını 2 ile sınırlamaz.
Dawood ibn Kareem

13

Binlik ayırıcısı olmayan sayılar için, bu basit, kompakt normal ifadeyi seviyorum:

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

ya da 2 hassasiyetle sınırlı olmamak üzere:

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

İkinci maçlar
1
100
100
100,74
100,7
0,7
0,7
0,72

Boş dizeyle eşleşmiyor (\ d *.? \ D * gibi)


7

Bunu iki ondalık basamağa kadar kullanırım:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$) geçişler:
.25
0.25
10.25
+0.25

geçmez:
-.25
01.25
1.
1.256


Bu da boş bir değer geçirir.
BengalTigger

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

12.Kabul edilmiş gibi şeyler yapar . Bu yaygın olarak kabul edilen şey değildir, ancak “esnek” olmanız gerekiyorsa, bu gitmek için bir yoldur. Ve elbette [0-9]onunla değiştirilebilir \d, ancak sanırım bu şekilde daha okunabilir.


5

Bunu dene

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

Olumlu ve olumsuz işaretlere de izin verecektir.


3

Ana cevap YANLIŞ çünkü geçerli 5.veya 5,girdi

Bu kod ele (ama benim örnek negatif numaraları yasak):

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

sonuçlar aşağıdaki gibidir:

true => "0" / true => "0,00" / true => "0,0" / true => "0,00" / true => "0,0" / true => "1,2" true => "1.1" / true => "1" / true => "100" true => "100.00" / true => "100.0" / true => "1.11" / true => "1,11" / false => "-5" / false => "-0.00" / true => "101" / false => "0.00.0" / true => "0.000" / true => "000.25" / false => ".25" / true => "100.01" / true => "100.2" / true => "00" / false => "5." / false => "6," / true => "82" / true => "81,3" / true => "



2

Genel olarak, yani sınırsız ondalık basamak:

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


1

Eğer yapılması gereken olmayacak eiçinde e666.76hesaba?

İle

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

Hayır, bu proje kapsamı dışındadır! teşekkürler olsa da, kullanışlı :)
user39221

1

cevabımı da eklediğimde, birisi faydalı bulabilir veya benimki de doğru olabilir.

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


alert(getInteger('-11.11'));

1

Bu benimle çalıştı:

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

Grup 1 şamandıra numaranızdır ve grup 2 sadece kesirdir.


1

Projemle bir tane denedim. Bu, + | -işaretli sayılara da izin verir .

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

0

Chrome 56, bu tür modelleri kabul etmiyor (Chrome 56, 11.11. Ek bir numara alıyor.), Türü metin olarak ilerleme durumu olarak kullanın.


0

Bu, üssel ve 2 basamağa kadar ondalık sayıya izin verir,

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

gösteri


Bu tamsayı ile eşleşmiyor1.2e-10
Toto

Evet, düzeltmen için teşekkürler. Ben sadece ondalık sayılar için düşündüm
Nambi_0915

([0-9]+)?daha iyi yazılmış \d*. Şimdi eşleşmiyor 10e3. OP de 2 basamağa kadar eşleştirmek istiyor.
Toto

-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');
            }
    }

fonksiyonu ondalık sayı hava durumunu ondalık basamakları olup olmadığını doğrular, "Doğru Sayı" diğer akıllıca "miktar metin kutusuna sadece sayı girin." uyarı mesajı gelecektir.

Teşekkürler... :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.