Form::REGEXP – přesná shoda řetězce
- tr.
- Člen | 79
Ahoj,
možná to sem nepatří, kdyžtak mě žeňte, ale zkusím to.
Snažím se o restrikci znaků v loginu:
->addRule(Form::REGEXP, "Login může obsahovat pouze malá písmena, velká písmena, čísla a znaky '_' a '-'", '/[[a-zA-Z][a-zA-Z0–9_-]]{6,32}');
Tomu výrazu však vyhovuje jakýkoliv výskyt, takže projde třeba i:
#aAaA2222_###
Jak omezit výraz na přenou shodu řetězce a ne pouhý výskyt?
Děkuji za pomoc.
- kravčo
- Člen | 721
Tvoj výraz /[[a-zA-Z][a-zA-Z0–9_-]]{6,32}
je veľmi
zaujímavý :) Zrejme si veľa skúšal :)
- obsahuje syntaktickú chybu, chýba ti na konci „delimiter“ / (lomka).
- je napísaný trochu nečitateľne, zapísaný kóšer by vyzeral
/[\[a-zA-Z][a-zA-Z0–9_-]\]{6,32}/
. - nie je viazaný na celú dĺžku reťazca, uspeje aj keď nájde zhodu
niekde vnútri – chýbajú mu „kotvy“ začiatok
^
resp. koniec$
reťazca - robí zrejme niečo úplne iné ako by si chcel…
- ak chceš reťazec, ktorý začína malým/veľkým písmenom a môže
obsahovať malé/veľké písmená, čísla a znaky „-“ a „_“ a je dlhý
6–32 znakov, správny regexp by mohol byť
napr:
/^[a-z][a-z0-9_-]{5,31}$/i
Vďaka tebe som bol nútený nainštalovať debugger regulárnych výrazov, dik :)
Veľmi ma totiž prekvapilo, že je (až na chýbajúcu lomku na konci) syntakticky správny… nevyzerá :)
- chemikus
- Člen | 49
Zdravím,
omlouvám se, že opět otvírám toto vlákno, ale popis regexpu zde byl celkem
dobře vysvětlený a hlavně jsem to rychle pochopil. Za což děkuju. Ale já
osobně používám regulární výraz
->addRule(AppForm::REGEXP, 'Vaše uživatelské jméno může obsahovat pouze písmena bez diakritiky a číslice.', '/[a-zA-Z][a-zA-Z0-9]+$/i')
A projde mi i diakritika :-/ nevíte, jak bych to měl opravit? Uživatelské jméno může začínat velké/malé písmeno a pak se může opakovat velké/malé písmeno a číslice.
Editoval chemikus (19. 10. 2009 13:15)
- kravčo
- Člen | 721
nAS napsal(a):
Chybí ti tam kotva začátku výrazu, takže se to napasuje pouze na konec a diakritika na začátku projde.
Presne.
Mám ešte dva hinty:
- Ide to skrátiť:
/^[a-z][a-z0-9]+$/i
(//i
znamená case insensitive) - Slovný popis toho, ako má vyzerať meno nie je presný, čo môže
používateľa zmiasť, ak zadá superkuul meno napr. 0M3G4 (nula na začiatku).
Správny popis mohol byť „Vaše uživatelské jméno může obsahovat pouze
písmena bez diakritiky a číslice, musí začínat písmenem a musí mít
minimální délku dva znaky.“ (ak chceš povoliť aj jednoznakové
mená, zmeň
+
na*
)