regulárny výraz (FORM::PATTERN) problém

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
pwnedko
Člen | 24
+
0
-

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.

duke
Člen | 650
+
0
-

Vyhoď to plus z toho reguláru…

pwnedko
Člen | 24
+
0
-

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.

duke
Člen | 650
+
0
-

Tady najdeš několik odkazů.

pwnedko
Člen | 24
+
0
-

Ďakujem ti veľmi pekne :)

vymak
Člen | 92
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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 :)