escapovaný Pattern = nefunkční Pattern

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

Narazil jsem na chybu, že mi formulář nechce uznat text.

$form->addText('username', 'Přezdívka:')
		->addRule(Form::PATTERN, 'Přezdívka smí obsahovat pouze tyto znaky: a-z, A-Z, 0-9, _ (podtržítko)', '[\w]');

S použitím automatického vykreslení:

<input type="text" class="text" name="username" id="frmregistrationForm-username"
data-nette-rules="{op:':pattern',msg:&quot;P\u0159ezd\u00edvka sm\u00ed obsahovat pouze tyto znaky: a-z, A-Z, 0-9, _ (podtr\u017e\u00edtko)&quot;,arg:&quot;[\\w]&quot;}"
pattern="[\w]" value="">

Z patternu [\w] se stane arg:„[\\w]“.
Místo toho, aby to uznalo jakýkoli „slovní“ znak, tak to uzná pouze w, jinak se formulář pochopitelně neodešle.

Používám Nette 2.0.3

Editoval Myiyk (22. 4. 2012 17:48)

David Grudl
Nette Core | 7445
+
0
-

Funguje mi to korektně. Zkus \w+.

Myiyk
Člen | 321
+
0
-

OK, už skoro funguje, ale nebere to diakritiku.

Majkl578
Moderator | 1364
+
0
-

Myiyk napsal(a):

OK, už skoro funguje, ale nebere to diakritiku.

To ani nemá. \w jsou alfanumerické znaky a podtržítko. Viz dokumentace:

A „word“ character is any letter or digit or the underscore character, that is, any character which can be part of a Perl „word“. The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place. For example, in the „fr“ (French) locale, some character codes greater than 128 are used for accented letters, and these are matched by \w.

duke
Člen | 650
+
0
-

Když se u preg_match použije modifikátor ‚u‘ (což Nette používá), tak to funguje. Jen to chce správnou verzi PHP (5.3.4+) a PCRE (8.10+).

Myiyk
Člen | 321
+
0
-

Problém je, že mi prohlížeč nevezme diakritiku. Jak mám udělat, aby ji to vzalo ?

Používám Google Chrome 18.0.1025.162 m

Editoval Myiyk (23. 4. 2012 11:25)

David Grudl
Nette Core | 7445
+
0
-

Třeba použít \S. V tomhle směru jsou reguláry v prohlížečích slabé.