Bu normal ifadeye negatif ondalık sayıları nasıl eklerim?


90

Negatif sayıları bu normal ifadeyle nasıl eşleştirebilirim? Bu normal ifade pozitif değerlerle iyi çalışıyor, ancak negatif değerlere de izin vermesini istiyorum, örneğin -10, -125.5 vb.

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

Teşekkürler


1
@DanPuzey Gönderdiği Regex'i görmediniz mi?
Nolonar


Başlangıçta [-] eklemeyi denedim ama bu işe yaramadı. ben de küçük değişikliklerin bir kombinasyonunu denedim
user1786107

bunu deneyin ^ -? \ d + (\. \ d +)? $
Civa

@DanPuzey sözleriniz tartışmaya hiçbir şey katmıyor ve kaba
Wassadamo

Yanıtlar:


176

Başlangıçta isteğe bağlı bir kısa çizgi eklemelisiniz -?( nicelik belirteci? , bir veya sıfır oluşum anlamına gelir ):

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

Bunu Rubular'da şu değerlerle doğruladım:

10.00
-10.00

ve her ikisi de beklendiği gibi eşleşti.


2
noktadan ^-?[0-9]\d*(\.\d+)?$
kaçmalısınız

14
Açıkça olası sayıları (+10.00, bazı uygulamalarda kullanılır) yakalama ihtiyacı potansiyeli varsa, kullanabilirsiniz^[-+]?[0-9]\d*(\.\d+)?$
Cemafor

129

Bazı Normal ifade örnekleri:

Pozitif Tamsayılar :

^\d+$

Negatif Tamsayılar :

^-\d+$

Tamsayı :

^-?\d+$

Pozitif Sayı :

^\d*\.?\d+$

Negatif Sayı :

^-\d*\.?\d+$

Pozitif Sayı veya Negatif Sayı :

^-?\d*\.{0,1}\d+$

Telefon numarası :

^\+?[\d\s]{3,}$

Kodlu telefon :

^\+?[\d\s]+\(?[\d\s]{10,}$

1900-2099 Yılı :

^(19|20)[\d]{2,2}$

Tarih (gg aa yyyy, g / a / yyyy, vb.):

^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$

IP v4 :

^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$

11

Neden önce buna ihtiyacın olduğunu bilmiyorum [0-9].

Deneyin:

^-?\d*(\.\d+)?$

Güncelleme

Birler yerinde bir rakam olacağından emin olmak istiyorsan, kullan

^-?\d+(\.\d+)?$

1
Muhtemelen sadece bir yerde bir rakamı garantilemek için ^-?\d+(\.\d+)?$, durum buysa işe
yaramalı

En uygun cevap. Kabul edilen cevapta gösterildiği gibi [0-9] 'un gerekli olduğunu sanmıyorum.
UzumakiL

3

GÜNCELLENDİ (13/08/2014): Bu, pozitif ve negatif sayılar için en iyi koddur =)

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

Bu numaralarla denedim ve iyi çalışıyor:

-1234454.3435
-98.99
-12.9
-12.34
-10.001
-3
-0.001
-000
-0.00
0
0.00
00000001.1
0.01
1201.0000001
1234454.3435
7638.98701

Değişim -*için -?eşleştiği için -------------.
Toto

Bazı ek değişiklikler yaptım ve şimdi iyi çalışıyor. Lütfen kontrol edin =)
Pacho Zuñiga

1

Bu, bir -veya +karakterine yalnızca ardından bir sayı geldiğinde izin verir :

 ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$

1

Bu hem pozitif hem de negatif tam sayılara izin verecektir

ValidationExpression = "^ -? [0-9] \ d * (\ d +)? $"


1

Negatiften pozitif sayılara doğru gereken django url'de regex hakkında bazı deneylerim var

^(?P<pid>(\-\d+|\d+))$

Bu (\-\d+|\d+)kısma odaklanıp diğerlerini göz ardı edelim , bu noktalı virgül normal ifadede OR| anlamına gelir , sonra negatif değer bu kısımla eşleşir ve buna pozitif değer eklenir\-\d+\d+



1

Buna sahipseniz val="-12XXX.0abc23"ve yalnızca ondalık sayıyı çıkarmak istiyorsanız, bu durumda bu regex ( ^-?[0-9]\d*(\.\d+)?$) bunu başarmanıza yardımcı olmayacaktır.
bu, doğru algılama normal ifadesine sahip uygun koddur:

var val="-12XXX.0abc23";
val = val.replace(/^\.|[^-?\d\.]|\.(?=.*\.)|^0+(?=\d)/g, '');
console.log(val);


0

0 veya 1 jeton eklemeniz yeterlidir:

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

Andre beni yendi, o da haklı, [0-9] jetonuna gerek yok.
BanksySan


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

pozitif veya negatif ondalık değerleri kabul eder.


0

Sayı için normal ifade, isteğe bağlı ondalık nokta, isteğe bağlı negatif:

^-?(\d*\.)?\d+$;

negatif tamsayı, ondalık, ondalık negatif için çalışır


0
^(-?\d+\.)?-?\d+$

izin vermek:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234
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.