Regex (^-?[1-9]*?0?(\.\d+)?$)|(^\d+\.$) Zezwalaj użytkownikowi wpisać następujące wartości dziesiętne lub całkowite

0.500
3
0
0.0
30
500000
4000.22
0.
-0.500
-3

I nie zezwolić

03.3, 00, 02, 00.0

Ale powyższy regex umożliwia również .3, .4

Czy istnieje sposób, aby nie zezwolić .3 lub .44 dzięki

Moja próba: (^-?[1-9]*?0+?(\.\d+)?$)|(^\d+\.$), który nie wydaje się pracować

0
user21 20 październik 2020, 09:08

1 odpowiedź

Najlepsza odpowiedź

Możesz dopasować opcjonalną -, a następnie stwierdzić za pomocą negatywnego wyglądu Lookhead, że wzór nie zaczyna się od zera, a następnie cyfrę.

Dzięki @ Anubhava dla korekty, aby dokonać ostatecznego wzoru.

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

Wzór w częściach

  • ^ Początek ciągu
  • -? Dopasuj opcjonalny łącznik
  • (?!0\d) Negatywne Lookhead, Assert, co jest bezpośrednio po prawej stronie, nie jest 0 i cyfra
  • \d+ Dopasuj cyfry 1+
  • \.?\d* Dopasuj opcjonalne . i 0+
  • $ Koniec ciągu

Zobacz Regex Demo

2
The fourth bird 20 październik 2020, 06:46