Biorąc pod uwagę wartość, chcę ją zweryfikować, aby sprawdzić, czy jest to ważny rok. Moje kryteria są proste, gdzie wartość powinna być liczbą całkowitą ze 4
znakami. Wiem, że to nie jest najlepsze rozwiązanie, ponieważ nie pozwoli na to lata wcześniej 1000
i pozwoli na takie lata 5000
. To kryterium jest adekwatne do mojego obecnego scenariusza.
To, co wymyśliłem, to
\d{4}$
Chociaż to działa, pozwala również na wartości ujemne.
Jak się upewnić, że dozwolone są tylko dodatnie liczby całkowite?
regex
string
validation
string-matching
Ranhiru Jude Cooray
źródło
źródło
Odpowiedzi:
Musisz dodać kotwicę początkową
^
jako:^\d{4}$
Twoje wyrażenie regularne
\d{4}$
dopasuje ciągi kończące się 4 cyframi . Tak więc wejście takie jak-1234
zostanie zaakceptowane.Dodając kotwicę początkową, dopasowujesz tylko te ciągi, które zaczynają się i kończą 4 cyframi, co w praktyce oznacza, że muszą zawierać tylko 4 cyfry.
źródło
whateverblahblah2323
. Teraz rozumiem, dlaczego odrobina nauki jest niebezpieczna: O10000
byłaby błędem.Lata od 1000 do 2999
^[12][0-9]{3}$
Na lata 1900-2099
^(19|20)\d{2}$
źródło
^(?:19|20)\d{2}$
(19|20)\d{2}
do mojego wyrażenia regularnego, aby sprawdzić poprawność formatu daty urodzenia? To jest moje wyrażenie regularne./^[0-9]{1,2}\/(0[1-9])|(1[0-2])\/[0-9]{4}$/
Chcę się upewnić, że rok ma zawsze 4 cyfry i zaczyna się od 19 ** lub 20 **„Zaakceptowana” odpowiedź na to pytanie jest zarówno niepoprawna, jak i krótkowzroczna.
Niepoprawne jest to, że dopasowuje ciągi, takie jak
0001
, który nie jest prawidłowym rokiem.Jest krótkowzroczny, ponieważ nie będzie pasował do żadnych wartości powyżej 9999. Czy już zapomnieliśmy o lekcjach z roku 2000 ? Zamiast tego użyj wyrażenia regularnego:
^[1-9]\d{3,}$
Jeśli chcesz dopasować lata z przeszłości, a nie tylko lata w przyszłości, możesz użyć tego wyrażenia regularnego do dopasowania dowolnej dodatniej liczby całkowitej:
^[1-9]\d*$
Nawet jeśli nie spodziewasz się dat z przeszłości, i tak możesz chcieć użyć tego wyrażenia regularnego, na wypadek gdyby ktoś wynalazł wehikuł czasu i chciał zabrać ze sobą twoje oprogramowanie.
Uwaga: to wyrażenie regularne będzie pasowało do wszystkich lat, w tym przed rokiem 1, ponieważ są one zwykle przedstawiane jako BC zamiast ujemnej liczby całkowitej. Oczywiście ta konwencja może się zmienić w ciągu następnych kilku tysiącleci, więc najlepszym rozwiązaniem jest dopasowanie dowolnej liczby całkowitej - dodatniej lub ujemnej - za pomocą następującego wyrażenia regularnego:
^-?[1-9]\d*$
źródło
Działa to od 1900 do 2099:
/(?:(?:19|20)[0-9]{2})/
źródło
Opierając się na odpowiedzi @ r92, dla lat 1970-2019:
(19[789]\d|20[01]\d)
źródło
197999
19[789]\d\d\d
pozwoli197999
/(19[789]\d|20[01]\d)/.test(1970324) >> true
1970
), a nie ostatnie 3. A co z(19[789]\d|20[01]\d)[^0-9]
? To pasowałoby,1970 324
ale nie1970324
Teoretycznie opcja 4-cyfrowa jest właściwa. Ale w praktyce lepiej byłoby mieć zakres 1900-2099.
Dodatkowo musi to być grupa bez przechwytywania. Wiele komentarzy i odpowiedzi proponuje grupowanie przechwytywania, które nie jest właściwym IMHO. Ponieważ dopasowanie może zadziałać, ale przy wyodrębnianiu dopasowań za pomocą wyrażenia regularnego wyodrębni 4-cyfrowe liczby i dwucyfrowe (19 i 20) liczby również ze względu na parantezę.
To zadziała w przypadku dokładnego dopasowania przy użyciu grup nieprzechwytywanych:
(?:19|20)\d{2}
źródło
możesz iść z czymś takim jak [
^-]\d{4}$
: zapobiegasz umieszczaniu znaku minus-
przed twoimi 4 cyframi.możesz także użyć
^\d{4}$
with,^
aby złapać początek łańcucha. To zależy od twojego scenariusza ...źródło
Aby przetestować rok w ciągu zawierającym inne słowa wraz z rokiem, możesz użyć następującego wyrażenia regularnego: \ b \ d {4} \ b
źródło
Posługiwać się;
^(19|[2-9][0-9])\d{2}$
dla lat 1900 - 9999.
Nie musisz się martwić o 9999 i dalej - do tego czasu AI zajmie się programowaniem !!! Hehehehe
Możesz przetestować swoje wyrażenie regularne na https://regex101.com/
Więcej informacji o grupach bez przechwytywania (wspomnianych w jednym z powyższych komentarzy) tutaj http://www.manifold.net/doc/radian/why_do_non-capture_groups_exist_.htm
źródło
Możesz zamienić swoją liczbę całkowitą na łańcuch. Ponieważ znak minus nie będzie pasował do cyfr, nie będziesz mieć lat ujemnych.
źródło
Używam tego wyrażenia regularnego w Javie
^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|[2-9][0-9])[0-9]{2}$
Działa od 1900 do 9999
źródło
/ ^ \ d {4} $ / Sprawdzi, czy ciąg składa się tylko z 4 liczb. W tym scenariuszu, aby wprowadzić rok 989, można zamiast tego podać 0989.
źródło
Jeśli chcesz dopasować RRRR lub RRRRMMDD, możesz użyć:
^((?:(?:(?:(?:(?:[1-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:[2468][048]|[13579][26])00))(?:0?2(?:29)))|(?:(?:[1-9]\d{3})(?:(?:(?:0?[13578]|1[02])(?:31))|(?:(?:0?[13-9]|1[0-2])(?:29|30))|(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\d|2[0-8])))))|(?:19|20)\d{2})$
źródło
Możesz również użyć tego.
([0-2][0-9]|3[0-1])\/([0-1][0-2])\/(19[789]\d|20[01]\d)
źródło
00/00/2000
lub31/02/1999
i wiele innych fałszywych dat.(0[1-9]|1[0-2])
jest znacznie lepszym określeniem na miesiąc