Kontrola validity data v formulari
- rezorcinol
- Člen | 25
Dobry den,
jak prosim mohu pres formular nacist datum a zaroven zkontrolovat, zda je datum platne?
- Martin Mates
- Člen | 179
Kontrolu platnosti uděláš pomocí regulárního výrazu, následovně:
<?php
$form->addText('datumdo', 'datum do:')
->addRule(Form::REGEXP, 'Nesprávný formát data do. Musí být dd.mm.yyyy.', '/^(0[1-9]|[12][0-9]|3[01])[\.](0[1-9]|1[012])[\.](19|20)[0-9]{2}$/')
?>
- Martin Mates
- Člen | 179
Tak si ten regulární výraz musíš upravit podle svých potřeb. Zkus http://www.regexp.cz/
- Ondřej Mirtes
- Člen | 1536
Zrovna to teď taky řeším a jelikož jsou pro mě RE nutné zlo a zatím jim ani trochu nerozumím, složil jsem si podle výše uvedené stránky regexp pro datum ve formátu DD.MM.YYYY:
0[1-9]|[12][0-9]|3[01]\.0[1-9]|1[0-2]\.(19|20)[0-9]{2}
Ale Nette hlásí:
Regular expression '0[1-9]|[12][0-9]|3[01]\.0[1-9]|1[0-2]\.(19|20)[0-9]{2}' must be JavaScript compatible.
Co konkrétně není kompatibilní s Javascriptem?
- Ondřej Mirtes
- Člen | 1536
Tak jsem to zkusil, ale chová se to divně:
$form->addText('date', 'Date')
->addRule(Form::FILLED, 'You must fill in date!')
->addRule(Form::REGEXP, 'Date must be in DD.MM.YYYY format', '/0[1-9]|[12][0-9]|3[01]\.0[1-9]|1[0-2]\.(19|20)[0-9]{2}/');
Už to nevyhazuje výjimku, ale bere mi to i data ve tvaru 9.9.09. Ne, že by to vadilo té funkci, která mi to převádí na timestamp, ale trochu se toho bojím.
- redhead
- Člen | 1313
jasir napsal(a):
Ono se tam opravdu kontroluje jen jestli začíná na
/
.
zdroj
pravda, tím spíš pro začátečníky by bylo rozhodně lepší, kdyby to na ně řvalo, zapomněl si lomítko, než nějakou JS nekompatibilitu. Aspoň mě to docela trvalo než jsem na to přišel a taky jsem tím přišel o pár vlasů.
- rezorcinol
- Člen | 25
LastHunter napsal(a):
…Už to nevyhazuje výjimku, ale bere mi to i data ve tvaru 9.9.09. Ne, že by to vadilo té funkci, která mi to převádí na timestamp, ale trochu se toho bojím.
Mohl byste se prosim o tu funkci podelit?
- jasir
- Člen | 746
redhead napsal(a):
jasir napsal(a):
Ono se tam opravdu kontroluje jen jestli začíná na
/
.
zdrojpravda, tím spíš pro začátečníky by bylo rozhodně lepší, kdyby to na ně řvalo, zapomněl si lomítko, než nějakou JS nekompatibilitu. Aspoň mě to docela trvalo než jsem na to přišel a taky jsem tím přišel o pár vlasů.
Jojo, jsem také pro. Také je to kandidát pro vylepšení hlášení vyjímek
- redhead
- Člen | 1313
jinak, vyzkoušej toto:
0?[1-9]|[12][0-9]|3[01]\. ?0?[1-9]|1[0-2]\. ?20[0-9]{2}
je to z www.regularnivyrazy.info, podporujete i mezeru za tečkou, pokud jí nechceš tak stačí smazat tu mezeru s otazníkem za tím (doufám :) )
Editoval redhead (1. 9. 2009 21:03)