Jakie jest wyrażenie regularne po przecinku z dokładnością do 2?
Prawidłowe przykłady :
123.12
2
56754
92929292929292.12
0.21
3.1
Nieprawidłowe przykłady:
12.1232
2.23332
e666.76
Kropka dziesiętna może być opcjonalna, a także liczby całkowite.
Odpowiedzi:
Prawidłowe tokeny wyrażeń regularnych różnią się w zależności od implementacji. Ogólna forma to:
Bardziej kompaktowy:
Obie zakładają, że obie mają co najmniej jedną cyfrę przed i po kropce dziesiętnej.
Aby wymagać, aby cały ciąg był liczbą tego formularza, zawiń wyrażenie w znaczniki początkowe i końcowe, takie jak (w formie Perla):
Aby dopasować liczby bez wiodącej cyfry przed przecinkiem (
.12
) i liczby całkowite o kropce ( )12.
, wyłączając wprowadzanie pojedynczej kropki (.
), spróbuj wykonać następujące czynności:Dodany
Owinięto część ułamkową,
()?
aby była opcjonalna. Pamiętaj, że wyklucza to formy takie jak12.
Uwzględnianie, które byłyby bardziej podobne^\d+\\.?\d{0,2}$
.Dodany
Służy
^\d{1,6}(\.\d{1,2})?$
do zatrzymania powtarzania i ograniczenia całej wartości dziesiętnej.źródło
-?
, jak w-?\d+(\.\d{1,2})?
. Nie uwzględniłem negatywów ani rozpoczynających się od kropki dziesiętnej, ponieważ nie były one w pytaniu PO, chociaż z pewnością są one ważne dla bardziej ogólnego formatu liczb. Wątek komentarzy tutaj podaje kilka sposobów obsługi „.21”.A ponieważ wyrażenia regularne są okropne do czytania, a tym bardziej nie rozumiem, oto pełny odpowiednik:
Można wymienić
[0-9]
z\d
większości zwykłych implementacjach ekspresji (w tym PCRE , najczęstszym). Zostawiłem to, ponieważ[0-9]
uważam, że łatwiej jest je czytać.Oto prosty skrypt Pythona, którego użyłem do sprawdzenia:
źródło
+
po pierwszym zamykającym paren,^([0-9]{0,3})(\.[0-9]{1,2})?$
\\.
zamiast,\.
ponieważ.
będzie wyglądać, jakby działało, ale pasuje do dowolnego znaku (nie tylko miejsca po przecinku). Na przykład, zarówno1z23
i1.23
może być uznany za ważny, jeśli nie uciecAby dołączyć opcjonalny znak minus i zabronić liczb takich jak
015
(które można pomylić z liczbami ósemkowymi):źródło
W przypadku liczb, które nie mają separatora tysięcy, podoba mi się ta prosta, zwarta regex:
lub, nie ograniczając się do dokładności 2:
Ta ostatnia odpowiada
1
100
100.
100,74
100,7
0,7
.7
.72
I nie pasuje do pustego ciągu (jak \ d *.? \ D * zrobiłby)
źródło
Używam tego jeden do dwóch miejsc po przecinku:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
przechodzi:0,25
0,25
10,25
0,25
nie pass:
-.25
01,25
1.
1.256
źródło
Sprawi, że rzeczy będą
12.
akceptowane. Nie jest to powszechnie akceptowane, ale jeśli trzeba być „elastycznym”, to jest jedna droga. I oczywiście[0-9]
można go zastąpić\d
, ale wydaje mi się, że w ten sposób jest bardziej czytelny.źródło
Spróbuj tego
Pozwoli to również na znaki pozytywne i negatywne.
źródło
Główna odpowiedź jest NIEPRAWIDŁOWA, ponieważ jest ważna
5.
lub5,
dane wejścioweobsłuży go ten kod (ale w moim przykładzie liczby ujemne są zabronione):
wyniki są poniżej:
źródło
źródło
Ogólnie, tj. Nieograniczona liczba miejsc po przecinku:
^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$
.źródło
Nie będzie trzeba podjąć
e
we666.76
pod uwagę?Z
źródło
dodając moją odpowiedź, ktoś może uznać ją za przydatną lub może być poprawną moją.
źródło
To zadziałało ze mną:
Grupa 1 to liczba zmiennoprzecinkowa, a grupa 2 to tylko ułamek.
źródło
Próbowałem jednego z moim projektem. Pozwala to również na liczby ze
+ | -
znakami.źródło
Chrome 56 nie akceptuje tego rodzaju wzorców (Chrome 56 akceptuje 11.11. Dodatkowy.) Z numerem typu, użyj tekstu jako tekstu jako postępu.
źródło
Pozwoli to na dziesiętne z potęgowaniem i do 2 cyfr,
Próbny
źródło
1.2e-10
([0-9]+)?
jest lepiej napisane\d*
. Teraz to nie pasuje10e3
. A OP chce dopasować do 2 cyfr.funkcja sprawdzi poprawność dowolnej liczby dziesiętnej liczba pogody ma miejsca dziesiętne lub nie, powie „Właściwy numer” w innym przypadku „Wprowadź tylko liczby w polu tekstowym kwoty”. pojawi się komunikat ostrzegawczy.
Dzięki... :)
źródło