girlsaddi
mirki z #webdev #programowanie #javascript #html
mam zwykłego inputa tekstowego i chciałbym wprowadzić w nim walidację

dd:mm:yyyy hh:mm - ss

gdzie
dd - to numery (dnia)
mm - to miesiac
yyyy - to rok

hh - godzina
mm -minuta
ss - dowolne 2 litery

jak się za to zabrać?
  • Najlepsze
  • Wszystkie komentarze
lobo
lobo
2
lobo
lobo
1
@girlsaddi: a tu masz jak nie pozwolić aby ktoś wpisał większy miesiąc niż 12 i dzień 31 https://regex101.com/r/Wt3S1J/3 można podobnie zrobić dla godzin/minut ale już mi się nie chcę :)
Seduxisti
@girlsaddi: wyrażenie regularne
ddiazepam
ddiazepam
@girlsaddi: @Seduxisti: wyrażenia regularne - tak
Jednak wyobraź sobie jak mało wygodne będzie korzystanie z takiego pola. Aby było wygodnie polecam coś tego rodzaju https://flatpickr.js.org/examples/
lobo
lobo
0
@girlsaddi:
Po pierwsze musisz zrobić wyrażenie regularne aby sprawdzić czy format jest prawidłowy, jak format jest prawidłowy musisz sprawdzić czy dany dzień i miesiąc jest prawidłowy (np. czy ktoś nie wpisał 31 lutego), czy godzina nie jest zbyt duża etc. Czyli najpierw proste wyrażenie sprawdzające czy format jest ok, a następnie rozbijasz sobie wartość na poszczególne wartości np.

//najpierw test czy format jest ok dopiero to co niżej
const [date, time] = val.split('
lobo
lobo
0
@ddiazepam: Skoro format ma być dd:mm:yyyy hh:mm - ss to liczba spacji jest stała i zaznaczyłem, że regex najpierw do testu, no i technicznie można po prostu regexpem wszystko wyciągnąć, ale mi się nie chcę go pisać.
ddiazepam
ddiazepam
@lobo: spoko, umknęło mi. Potem ogarnąłem, że się pomyliłem, dlatego usunąłem komentarz
lobo
lobo
0
@girlsaddi: A masz nawet taki regex na kolanie pisany :) https://regex101.com/r/Wt3S1J/2
lobo
lobo
0
@girlsaddi: oczywiście to jest bez jakiejś sensownej walidacji bo przejdzie 33:33:33 33:33 - fdd to można oczywiście ogarnąć tylko regex będzie bardziej skomplikowany
mk321
mk321
0
@lobo: 31:02:1992 przechodzi xD
lobo
lobo
0
@mk321: No bo regexpem tego nie ogarniesz nie masz opcji w regexp dawać kalkulacji przecież
mk321
mk321
0
@lobo: tak, dlatego regexp się do tego nie nadaje.
lobo
lobo
0
@mk321: Nadaje się do wstępnej walidacji formatu bądź wyciągnięcia danych do walidacji czytaj wątek od początku.
mk321
mk321
0
@lobo: do wstępnej walidacji i wyciągnięcia danych niepotrzeba w regexpie zapisywać, żeby miesiąc nie był większy niż 12 i dzień 31.
lobo
lobo
0
@mk321: nie trzeba, ale można i wtedy nie musisz później walidować np. miesiąca albo gdy jest oczywisty błąd w dacie. To są po prostu rzeczy które ułatwiają nieco.
mk321
mk321
0
@lobo: i tak trzeba potem wyliczyć czy dni w danym miesiącu są poprawne, więc bez sensu wcześniej sprawdzać to regexpem.

Dodanie tego do regexpa nic nie daje, a tylko utrudnia czytelność regexpa i powoduje większe ryzyko błędu w nim.
lobo
lobo
0
@mk321: Oczywiście, że daje ten regex który dałem walidacje na dni można by wywalić, ale np. miesiące/godziny/minuty już nie trzeba walidaować.
MQs
MQs
0