Autor Zpráva
skolak
Profil *
V hledani sem nasel jen slozite veci ja potřebuju regulerni přikazy jednoduche

//bude to pr nette a prikaz ->addRule(Form::PATTERN, [regex]')
jak by vypadaly regulerní příkazy a proč:

pro datum ve formatu DD/MM/YYYY
pro čas ve formátu HH:MM

hodně sem toho hledal na netu a všude je toho hodně popsané ale nikde sem nenašel nic co by způsobilo aha moment..

prosim prosím :)
juriad
Profil
Číslo v rozsahu 0-23 zapíšeš:
(0[0-9]|1[0-9]|2[0-3]) # nula následovaná jakýmkoli číslem nebo jednička následovaná jakýmkoli číslem nebo dvojka a za ní nula až tři
([0-1][0-9]|2[0-3]) # zkráceně zapsáno (první dvě možnosti sloučeny do jedné)
([0-9]|1[0-9]|2[0-3]) # zakázaná počáteční nula při hodnotě 0-9
(0?[0-9]|1[0-9]|2[0-3]) # volitelná počáteční nula při hodnotě 0-9 (je za ní otazník)

Číslo v rozsahu 0-59 zapíšeš:
([0-5][0-9]) # vyžaduje počáteční nulu
([0-9]|[1-5][0-9]) # bez počáteční nuly
(0?[0-9]|[1-5][0-9]) # volitelná počáteční nula

Rok (libovolné čtyřciferné číslo):
([0-9][0-9][0-9][0-9]) # vyžaduje počáteční nuly
([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]) # zakazuje počáteční nuly
((000)?[0-9]|(00)?[1-9][0-9]|0?[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]) # volitelně s počátečními nulami (4 číslice)

Měsíc (1-12):
(0[1-9]|1[1-2]) # vyžaduje počáteční nulu
([1-9]|1[1-2]) # bez počáteční nuly
(0?[1-9]|1[1-2]) # volitelná počáteční nula

Pro den je to složitější (měsíce mají různý počet dnů); nejspíš stačí pravidlo, že hodnota musí být v rozsahu 1-31:
(0[1-9]|2[0-9]|3[0-1]) # vyžaduje počáteční nulu
([1-9]|2[0-9]|3[0-1]) # bez počáteční nuly
(0?[1-9]|2[0-9]|3[0-1]) # volitelná počáteční nula

Složení výrazu pro datum:
regexProDen/regexProMěsíc/regexProRok  # pokud jsi v kontextu, kde můžeš použít lomítko
regexProDen\/regexProMěsíc\/regexProRok  # někdy musíš lomítka escapovat
(pozor při zápisu v PHP musíš zapsat zpětné lomítko dvakrát za sebou)

Složení výrazu pro čas:
regexProHodinu:regexProMinutu # dvojtečku zpravidla nemusíš escapovat
Joker
Profil
skolak:
Regulerni Vyrazy
Regulérně se jim říká regulární výrazy ;-)

Jedna varianta je co píše [#2] juriad, ale pro detailní validaci bych regulární výrazy nedoporučil, ohlídat přes ně všechno bude šílené (jak je vidět i z toho příspěvku).

Takže pro základní kontrolu (která odfiltruje úplné nesmysly) bych asi udělal něco jako
Datum: [0-3]?[0-9]/(0?[1-9]|1[1-2])/[1-2][0-9][0-9][0-9]
(bude fungovat jen pro roky 1000-2999)
Čas: [0-5]?[0-9]:[0-5][0-9]
(pro zajímavost, v češtině se „oficiálně“ hodiny a minuty oddělují tečkou, tj. „český“ formát času je hh.mm:ss)

Samozřejmě to není stoprocentní, projdou tím věci jako 39.1.2013 nebo 00.1.2000, ale na stoprocentní validaci data nejsou regulární výrazy vhodné (neumím si představit použitelný regulární výraz, který by správně poznal, jestli 29.2. je pro daný rok platné datum nebo ne)

Upravil jsem, aby fungovaly i hodiny bez úvodní nuly.
skolak
Profil *
Jej chlapci :D to je moc hezke..

me by stacilo takhle:
(1 nebo 2 cislice)/-||-/(4 cislice)

a u daumu podobne..

estr vic by stacilo jesi jsou v datumu jenom same cisla a 2 lomitka..
juriad
Profil
Tak to stačí mnohem jednodušeji.
\d\d?/\d\d?/\d\d\d\d # datum (1-2 číslice, lomítko, 1-2 číslice, lomítko, 4 číslice)
\d\d?:\d\d? # čas (1-2 číslice, dvojtečka, 1-2 číslice)
Poznámka: \d je zkratka za [0-9]
Druhá poznámka: zpětné lomítko může být potřeba escapovat dalším zpětným lomítkem.
peta
Profil
skolak [#2] juriad to krasne rozepsal. Proc to nechces pouzit? Zda se ti to slozite? Vysvetlivky k zavorkam a dalsi znaky jsou treba na http://www.regexp.cz/ . U regularniho vyrazu jde o to popsat vsechny moznosti.
[0-9] # cisla 0-9 (1x [0-9])
[0-9][0-9] # cisla 00-99 (2x [0-9]) -- prvni znak je mezi 0-9 a druhy znak z retezce je take mezi 0-9
[0-9][0-9][0-9] # cisla 000-999 (3x [0-9])
\d # cisla 0-9 (1x \d)
\d\d # cisla 00-99 (2x \d)
\d\d\d # cisla 000-999 (3x \d)
[0-5][0-9] # cisla 00-59
[0-9]|[1-5][0-9] # cisla 0-9 nebo 10-59, cili 0-59
[0-5]\d # cisla 00-59, link nadpis: PCRE zástupné znaky
\d|[1-5]\d # cisla 0-9 nebo 10-59, cili 0-59
Bohuzel se to musi takhle skladat, pokud chces konkretni retezec.
skolak
Profil *
dik chlapi dela to to co ma..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0