Prawidłowe tokeny wyrażeń regularnych różnią się w zależności od implementacji. Ogólna forma to:
[0-9]+(\.[0-9][0-9]?)?
Bardziej kompaktowy:
\d+(\.\d{1,2})?
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):
^\d+(\.\d{1,2})?$
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:
^(\d+(\.\d{0,2})?|\.?\d{1,2})$
Dodany
Owinięto część ułamkową, ()?aby była opcjonalna. Pamiętaj, że wyklucza to formy takie jak 12. 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.
Matematycznie myślę, że dokładność liczby 2 powinna zawsze mieć dwa miejsca po przecinku, nawet jeśli ostatni wynosi zero. Opiera się to na moim doświadczeniu ze znaczącymi liczbami, więc może się mylić, ale tak naprawdę nie wiesz, czy 1,7 to 1,70, czy dowolna liczba od 1,70 do 1,74.
@BimalDas, możesz obsługiwać negatywy, poprzedzając je wyrażeniem -?, 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:
^# Start of string[0-9]+# Require one or more numbers(# Begin optional group
\. # Point must be escaped or it is treated as "any character"[0-9]{1,2}# One or two numbers)?# End group--signify that it's optional with "?"
$ # End of string
Można wymienić [0-9]z \dwię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:
import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")
valid =["123.12","2","56754","92929292929292.12","0.21","3.1"]
invalid =["12.1232","2.23332","e666.76"]assert len([deci_num_checker.match(x)!=Nonefor x in valid])== len(valid)assert[deci_num_checker.match(x)==Nonefor x in invalid].count(False)==0
Dla użytkowników Java: przecinek dziesiętny nie powinien być poprzedzony znakiem ucieczki.
3
@Gracchus Czy jesteś pewien? Prawdopodobnie powinno być \\.zamiast, \.ponieważ .będzie wyglądać, jakby działało, ale pasuje do dowolnego znaku (nie tylko miejsca po przecinku). Na przykład, zarówno 1z23i 1.23może być uznany za ważny, jeśli nie uciec
@dbr Może właśnie tak powinno być. Java skarżyła się na niewłaściwe ucieczkę. Usuwanie tego „naprawiłem” (zamknij), lol. Nie miałem jeszcze okazji w pełni go przetestować.
20
Aby dołączyć opcjonalny znak minus i zabronić liczb takich jak 015(które można pomylić z liczbami ósemkowymi):
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
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.
functionDecimalNumberValidation(){var amounttext =;if(!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
alert('Please enter only numbers into amount textbox.')}else{
alert('Right Number');}}
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.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.