Form::REGEXP: různá chování v serverové a JS validaci + špatné chování v JS validaci
- medhi
- Generous Backer | 255
Ahoj, dlouho jsem sestrojoval regulární výraz, který nedovolí dvě lomítka za sebou v řetězci a zároveň v tomto řetězci nesmí být žádné zpětné lomítko.
Funguje dobře například na http://www.regexp.cz/ když ho testuji pomocí PHP preg a kde má tuto podobu:
^(?:[^\\](?<!\/\/))+$
Ovšem ve formulářích Nette 2.0 alpha2 s použitím Form::REGEXP
nefunguje. Pokud však vypnu JS a přidám další dvě
zpětná lomítka do části [^\\]
, tedy
^(?:[^\\\\](?<!\/\/))+$
tak tento výraz funguje v serverové validaci. Pořád ale nefunguje v JS validaci, kde nefunguje ani původní výraz (tedy žádný výraz jsem pro JS validaci nebyl schopen dát dohromady).
Problém se tedy nachází v části [^\\]
. Tato část se do
serverové validace přeloží jako [^\]
, což hlásí chybu, že
není uzavřeno závorkou ]
.
Je troufalé to považovat za bug? Trápí mě to dnes už několik hodin a mám na tom strašný zásek. Díky moc
- David Grudl
- Nette Core | 8228
Mě funguje tohle na serveru i na JS:
->addRule(Form::REGEXP, '...', '/[^\\\\]+/');
Jde o výraz /[^\\]+/
, který je nutné v PHP řetězci zapsat
jako '/[^\\\\]+/'
. Nemůže být problém jinde? Použil jsi
delimitery?
Jinak výraz /^ ...cokoliv... $/
lze zapsat přímo jako
...cokoliv...
, jen místo REGEXP uveď podmínku PATTERN.