/ / Regex - jak sprawić, by moje wyrażenie regularne nie przechodziło, gdy ciąg znaków jest pusty - wyrażenie regularne

Regex - jak sprawić, by moje wyrażenie nie było przekazywane, gdy łańcuch jest pusty - regex

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 № 1

Możesz potrzebować co najmniej jednej cyfry:

^-?d[d,]*(?:.d+)?$
^^
required

Rubular

Aby umożliwić także dopasowanie .05:

^-?d[d,]*(?:.d+)?$|^-?.d+$

Rubular

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.