Většinou chceme aby uživatelské jméno bylo složeno jen z písmen, čísel a maximálně dovolíme znaky „-“ a „_“. V NETTE takový prvek formuláře můžeme definovat následovně:
$form->addText('username', 'Uživatelské jméno') ->addRule(Form::REGEXP, '„Uživatelské jméno“ musí začínat písmenem a může obsahovat jen písmena, čísla a znaky "-", "_".', '/^[a-z][a-z0-9_-]+$/i'); |
Vysvětlení regulárního výrazu:
/^ – značí začátek
[a-z] – očekáváme znak a-z či A-Z
[a-z0-9_-] – očekáváme znaky a-z, A-Z, 0-9, znaky „-“ a „_“
+ – váže se k předchozí definici a říká nám, že znak definovaný pomocí [a-z0-9_-] se musí vyskytovat 1 až n-krát (znak * by nám naznačoval že výskyt může být i 0)
$/ – značí konec řetězce
i – značí, že celý výraz je CASE INSENSITIVE neboli že nezáleží na velikosti písmen. Tudíž nemusíme psát [a-zA-Z] ale stačí nám jednoduché [a-z]
Tento výraz nám v tomto zápisu ještě zajistí, že Uživatelské jméno bude dlouhé minimálně 2 znaky. Samozřejmě se dá regulárním výrazem řešit i povinná délka, ale dle mě už pak nejsme schopni předat uživateli přesnou odpověď kde v zadání udělal chybu.