Jak uwzględnić ujemne liczby dziesiętne w tym wyrażeniu regularnym?

89

Jak dopasować również liczby ujemne za pomocą tego wyrażenia regularnego? To wyrażenie regularne działa dobrze z wartościami dodatnimi, ale chcę, aby zezwalało również na wartości ujemne, np. -10, -125,5 itd.

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

Dzięki

user1786107
źródło
1
@DanPuzey Nie widziałeś Regexa, który opublikował?
Nolonar
regexper.com
Dave Bish
próbowałem dodać [-] na początku, ale to nie zadziałało. Próbowałem też kombinacji małych zmian
user1786107
spróbuj tego ^ -? \ d + (\. \ d +)? $
Civa
@DanPuzey Twoje słowa nie wnoszą nic do dyskusji i są
niemiłe

Odpowiedzi:

173

Na początku należy dodać opcjonalny łącznik, dodając -?( ?jest to kwantyfikator oznaczający jedno lub zero wystąpień ):

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

Sprawdziłem to w Rubular z tymi wartościami:

10.00
-10.00

i oba dopasowane zgodnie z oczekiwaniami.

Mike Perrenoud
źródło
2
należy uciec kropce, czyli^-?[0-9]\d*(\.\d+)?$
Alex Shesterov
14
Jeśli istnieje potrzeba wychwycenia liczb jednoznacznie dodatnich (+10,00, używane w niektórych aplikacjach), możesz użyć^[-+]?[0-9]\d*(\.\d+)?$
Cemafor
127

Niektóre przykłady wyrażeń regularnych:

Dodatnie liczby całkowite :

^\d+$

Ujemne liczby całkowite :

^-\d+$

Liczba całkowita :

^-?\d+$

Liczba dodatnia :

^\d*\.?\d+$

Liczba ujemna :

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

Liczba dodatnia lub liczba ujemna :

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

Numer telefonu :

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

Telefon z kodem :

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

Lata 1900-2099 :

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

Data (dd mm rrrr, d / m / rrrr itp.):

^([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}$
KF2
źródło
11

Nie wiem, dlaczego potrzebujesz tego najpierw [0-9].

Próbować:

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

Aktualizacja

Jeśli chcesz mieć pewność, że będziesz mieć cyfrę na swoim miejscu, użyj

^-?\d+(\.\d+)?$
Andre Calil
źródło
1
Prawdopodobnie tylko po to, aby zagwarantować cyfrę w jednym miejscu, ^-?\d+(\.\d+)?$powinno działać, jeśli tak jest
Cemafor
Najbardziej trafna odpowiedź. Nie sądzę, aby [0-9] było konieczne, jak pokazano w zaakceptowanej odpowiedzi.
UzumakiL
3

AKTUALIZACJA (13/08/2014): To najlepszy kod dla liczb dodatnich i ujemnych =)

(^-?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}

Próbowałem z tymi liczbami i działa dobrze:

-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
Pacho Zuñiga
źródło
Zmień -*na, -?ponieważ pasuje -------------.
Toto
Wprowadziłem kilka dodatkowych zmian i teraz działa dobrze. Sprawdź, czy =)
Pacho Zuñiga
1

Pozwoli to na znak -lub +tylko wtedy, gdy nastąpi po nim liczba:

 ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$
Ian Timothy
źródło
1

Umożliwi to zarówno dodatnie, jak i ujemne liczby całkowite

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

Prajwal Rai
źródło
1

Przeprowadziłem kilka eksperymentów dotyczących wyrażenia regularnego w adresie URL django, które wymagały od liczb ujemnych do dodatnich

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

Skoncentrujmy się na tej (\-\d+|\d+)części i ignorując inne, ten średnik |oznacza OR w wyrażeniu regularnym, wtedy wartość ujemna będzie pasować do tej \-\d+części, a wartość dodatnia do tego\d+

Aditya Kresna Permana
źródło
0

Po prostu dodaj token 0 lub 1:

^-?[0-9]\d*(.\d+)?$
BanksySan
źródło
Andre mnie pokonał, też ma rację, nie potrzebuje tokena [0-9].
BanksySan
0

Tylko dla liczb ujemnych jest to idealne.

^-\d*\.?\d+$
Kamleshkumar Gujarathi
źródło
0
^[+-]?\d{1,18}(\.\d{1,2})?$

akceptuje dodatnie lub ujemne wartości dziesiętne.

Deepak Tambe
źródło
0

Wyrażenie regularne dla liczby, opcjonalna kropka dziesiętna, opcjonalna wartość ujemna:

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

działa dla ujemnych liczb całkowitych, dziesiętnych, ujemnych z dziesiętnymi

vivesh
źródło
0
^(-?\d+\.)?-?\d+$

dopuszczać:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234
alchemik
źródło
0

Jeśli masz to val="-12XXX.0abc23"i chcesz wyodrębnić tylko liczbę dziesiętną, w tym przypadku to wyrażenie regularne ( ^-?[0-9]\d*(\.\d+)?$) nie pomoże ci tego osiągnąć.
to jest właściwy kod z prawidłowym wyrażeniem regularnym wykrywania:

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

Bazylia
źródło