Mam wyrażenie regularne, które zweryfikuje, aby upewnić się, że mam numer. ale minęło, jeśli ciąg, który sprawdzam, jest również „.”
^(\d|-)?(\d|,)*\.?\d*$
Odpowiedzi:
2 dla odpowiedzi № 1Możesz potrzebować co najmniej jednej cyfry:
^-?d[d,]*(?:.d+)?$
^^
required
Aby umożliwić także dopasowanie .05:
^-?d[d,]*(?:.d+)?$|^-?.d+$
Pamiętaj, że twoje wyrażenie pozwala również na wiele przecinków jeden po drugim, co może nie być pożądane.
1 dla odpowiedzi nr 2
Jakiego języka używasz? Jest „bez wątpienia lepszy sposób na wykrycie„ czy to liczba? ”Niż wyrzucanie własnego wyrażenia regularnego od zera. Jeśli używasz Perla, to spójrz na moduł Regexp :: Common, który zapewnia dziesiątki sprawdzonych wyrażeń regularnych do twojego użytku.
0 dla odpowiedzi № 3
próbować
^-?([0-9]+)(,[0-9]+)?$
0 dla odpowiedzi nr 4
Co powiesz na...
^-?d+(,d{3})*(.d+)?$|^-?.d+$
Przetestowałem to na Rubularu, co jest niesamowite (dzięki, Mark!). „Przyjmuje niechlujne zarządzanie przecinkami, takie jak„ 1234 567 ”, ale odrzuci oczywiste bzdury, takie jak„ 123 ,,,,456 ”.
0 dla odpowiedzi № 5
To jest właściwe wyrażenie regularne dla zgrupowane dziesiętne:
^-?(?:\.\d+|\d{1,3}(?:,\d{3})*(\.\d*)?)$
- Akceptuje znak początkowy.
- Następnie tworzy drzewo z dwiema ścieżkami, kropką lub 1-3 cyframi.
- Jeśli nie ma żadnego z nich, kończy się niepowodzeniem.
- Jeśli zobaczy kropkę, zajmie dowolną liczbę cyfr, ale co najmniej 1.
- Jeśli zobaczy klaster cyfr, zajmie dowolną liczbę grup składających się z przecinka + 3 cyfry.
- Następnie możesz mieć kropkę dziesiętną, jeśli chcesz, i podążać za nią dowolną liczbą cyfr.
Poniższa poprawka obsługuje również niezgrupowane numery:
^-?(?:\.\d+|\d{1,3}(?:\d*|(?:,\d{3})+)(\.\d*)?)$
Ale nie pozwala to na włączenie więcej niż 3 osób do grupy. Zatem po 1-3 cyfrach musi być kolejna cyfra, przecinek, kropka lub koniec.
- Jeśli jest to cyfra, nie może nastąpić nic oprócz cyfry lub kropki.
- Biorąc pod uwagę przecinek, nie mogą występować tylko 3 cyfry. Od tego czasu zintensyfikowaliśmy to do 1 lub więcej
\d*
obsługuje przypadek natychmiastowego okresu.