regulárny výraz (FORM::PATTERN) problém
- pwnedko
- Člen | 24
Zdravím všetkých, chcel by som sa spýtať jednu vec. Mám problém s PATTERNOM vo formulári. Mám pridaný takýto prvok:
<?php
$form->addText('bankaccount', 'Bank account:')
->addRule(Form::FILLED, 'Bank account si required field !')
->addRule(Form::PATTERN, 'Bank account is not in the correct format ! The bank account must be in IBAN format! (Example: SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)', '[A-Z]{2}+[0-9]{1,32}');
?>
Čiže chcel by som taký pattern mať ,že aby mu vyhovovali prvé dva znaky musia byť veľké písmená a potom dalších max. 32 znakov čísla. Skúšam to ako som hore uviedol ale stále píše : Bank account is not in the correct format ! The bank account must be in IBAN format! (Example: SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)'
Veľa som hľadal na fóre ale nič som nenašiel čo by môj problém vyriešilo tak aby sa našiel niekto kto by mi vedel s problémom pomôcť budem veľmi rád.
- pwnedko
- Člen | 24
Super :) Funguje to ďakujem :) Ešte by som sa ťa chcel spýtať nevieš nejakú podobnú stránku ako je toto: http://www.regexp.cz/ ale pre testovanie týchto nette patternov ? Tie patterny všetky som testoval tam.
- vymak
- Člen | 92
Ahoj, hledal jsem různě po fóru ale pořád se nějak nemůžu dostat ke správnému výsledku.
Můj problém je takový:
Mám formulář, kde se zadává HTML kód odkazu [ukázka níže], který
následně parsuji a informace z něj ukládám do databáze.
<a href="http://www.example.com" title="Nějaký testovací title">Titulek odkazu</a>
Chtěl jsem pro takový to vstup vytvořit validátor aby testoval zda-li kód obsahuje atributy title a href. Bohužel jsem narazil a nevím jak se z toho dostat :D
$form->addTextarea('html', 'HTML kód:')
->setAttribute('placeholder', 'Zde zadejte váš HTML kód odkazu')
->setRequired('Zadejte HTML kód vašeho odkazu')
->addRule(Form::REGEXP, 'HTML kód musí obsahovat atribut title', '/<a\s[^>]*title=\"([^\"]*)\"[^>]*>/')
->addRule(Form::REGEXP, 'HTML kód musí obsahovat atribut href', '/<a\s[^>]*href=\"([^\"]*)\"[^>]*>/');
Když nechám validační pravidlo Form:REGEXP vše funguje správně, ale při validaci na serveru se běh ukončí s tím, že Validator REGEXP is deprecated; use PATTERN instead (which is matched against the entire value and is case sensitive). Šlo by to spravit tím, že bych zakomentoval řádek
trigger_error('Validator REGEXP is deprecated; use PATTERN instead (which is matched against the entire value and is case sensitive).', E_USER_DEPRECATED);
, ale to myslím není úplně to nejlepší řešení :D
Pokud ale použiji Form:PATTERN, tak už se nedostanu zase přes javascriptovou validaci :(
Nemá někdo nápad jak bych to mohl vyřešit?
- pwnedko
- Člen | 24
Ja by som to osobne riešil mimo regexu cez HTMLPurifier.
Asi takto nejako:
...
->addRule(callback($this, 'checkUrlParam'), 'Kod musí obsahovať parametre title a href')
....
public function checkUrlParam($url){
// a tuto cez purifier ošetriť tie parametre dokumentáciu majú popísanú super.
}
Editoval pwnedko (28. 1. 2014 11:31)
- nanuqcz
- Člen | 822
Ahoj,
toto nefunguje?
$form->addTextarea('html', 'HTML kód:')
...
->addRule(Form::PATTERN, 'HTML kód musí obsahovat atribut title', '<a\s[^>]*title="([^"]*)"[^>]*>.*')
->addRule(Form::PATTERN, 'HTML kód musí obsahovat atribut href', '<a\s[^>]*href="([^"]*)"[^>]*>.*');
Pokud ti Form::PATTERN nefunguje, tak bude pravděpodobné chyba někde v tom regulárnim výrazu, který mu předáváš.
Editoval nanuqcz (28. 1. 2014 11:36)
- vymak
- Člen | 92
pwnedko napsal(a):
Ja by som to osobne riešil mimo regexu cez HTMLPurifier.
Asi takto nejako:
... ->addRule(callback($this, 'checkUrlParam'), 'Kod musí obsahovať parametre title a href') .... public function checkUrlParam($url){ // a tuto cez purifier ošetriť tie parametre dokumentáciu majú popísanú super. }
Díky, za tip ukládám si to do záložek někdy se to bude určitě hodit :) Už jsem to rozchodil díky @nanuqcz
nanuqcz napsal(a):
Ahoj,
toto nefunguje?$form->addTextarea('html', 'HTML kód:') ... ->addRule(Form::PATTERN, 'HTML kód musí obsahovat atribut title', '<a\s[^>]*title="([^"]*)"[^>]*>.*') ->addRule(Form::PATTERN, 'HTML kód musí obsahovat atribut href', '<a\s[^>]*href="([^"]*)"[^>]*>.*');
Pokud ti Form::PATTERN nefunguje, tak bude pravděpodobné chyba někde v tom regulárnim výrazu, který mu předáváš.
Díky moc, pomohlo to :)