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.
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+
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);
Odpowiedzi:
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.
źródło
^-?[0-9]\d*(\.\d+)?$
^[-+]?[0-9]\d*(\.\d+)?$
Niektóre przykłady wyrażeń regularnych:
Dodatnie liczby całkowite :
Ujemne liczby całkowite :
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}$
źródło
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+)?$
źródło
^-?\d+(\.\d+)?$
powinno działać, jeśli tak jestAKTUALIZACJA (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
źródło
-*
na,-?
ponieważ pasuje-------------
.Pozwoli to na znak
-
lub+
tylko wtedy, gdy nastąpi po nim liczba:^([+-](?=\.?\d))?(\d+)?(\.\d+)?$
źródło
Umożliwi to zarówno dodatnie, jak i ujemne liczby całkowite
źródło
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+
źródło
To zadziałało dla mnie, pozwalając zarówno na liczby ujemne, jak i dodatnie :
\-*\d+
Jeśli używasz C #:
Regex.Match(someString, @"\-*\d+").Value;
źródło
Po prostu dodaj token 0 lub 1:
^-?[0-9]\d*(.\d+)?$
źródło
Tylko dla liczb ujemnych jest to idealne.
^-\d*\.?\d+$
źródło
^[+-]?\d{1,18}(\.\d{1,2})?$
akceptuje dodatnie lub ujemne wartości dziesiętne.
źródło
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
źródło
^(-?\d+\.)?-?\d+$
dopuszczać:
23425.23425 10.10 100 0 0.00 -100 -10.10 10.-10 -10.-10 -23425.23425 -23425.-23425 0.234
źródło
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);
źródło