Regulární výraz se zpětným lomítkem

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

Ahoj, snažím se přidat validátor na regulární výraz, ale nějak se mi nedaří..

Když přidám tenhle pattern: ^[ \p{N}\p{L}\p{M}\p{P}\$\+\<\=\>\^\|\~]{1,30}$` a vyplním např Petr

Tak mi neprojde, a když se podívám tak nette tam nejspíš nahrazuje zpětné lomítko za dvě zpětná lomítka.. nevím zda to může být tím. Kdyby někoho něco napadlo, určitě budu vděčnej, díky.

David Matějka
Moderator | 6445
+
0
-

Zkus smazat ^ a $ ze zacatku, resp z konce, nette to tam dava samo

kleinpetr
Člen | 480
+
0
-

Ani tak nejde :/

David Matějka
Moderator | 6445
+
0
-

ukaz kod, jak to pravidlo pridavas

kleinpetr
Člen | 480
+
0
-
$element->addRule(Form::PATTERN, 'Neprojde', '[ \p{N}\p{L}\p{M}\p{P}\$\+\<\=\>\^\|\~]{1,30}');
David Matějka
Moderator | 6445
+
0
-

muze za to nekompatibilita pcre s javascriptovyma regexama, viz treba http://stackoverflow.com/…a-z-using-pl

kleinpetr
Člen | 480
+
0
-

Takže v php by to prošlo ale v js ne.. jak se to dá řešit ? nějaký univerzální regulár ? a kde se dozvím ty rozdíly mám tam těch regulárů celkem hodně :/

David Matějka
Moderator | 6445
+
0
-

Doporucuji jako pomocnika https://regex101.com/ – vpravo tam mas explanation. JS validaci bys mohl obejit vlastni validacni podminkou, treba

->addRule(function ($control) {
	return preg_match(..., $control->value);
}, '...!')

To nedokaze nette prepsat do javascriptu, takze se provede az pak serverova validace

kleinpetr
Člen | 480
+
0
-

Aha.. takže neni ani nějaká možnost nastavit jiný regulár pro php a jiný pro js ?

David Matějka
Moderator | 6445
+
0
-

Mohl by sis napsat vlastni validator pro php + js https://doc.nette.org/…s/validation

kleinpetr
Člen | 480
+
0
-

Tak to mě moc netěší.. peorože ty reguláry stahuji z nějakého xml, zároveň s elementy.. Když se tedy ještě zeptám, co přesně je chyba ? Pokud to chápu tak js tenhle regulár nezvládne a z jakého tedy důvodu, mockrát díky za pomoc ;)

David Matějka
Moderator | 6445
+
0
-

Pokud to chápu tak js tenhle regulár nezvládne a z jakého tedy důvodu

jsem ti to psal, viz ten odkaz na stackoverflow – js nezvlada unicode zkratky

kleinpetr
Člen | 480
+
0
-

Díky, takže teroeticky by tohle mělo nějakým způsobem vyřešit můj problém:

//Pro JS
->addRule(Form::PATTERN, '...!', 'pattern bez unicodes');

//Pro PHP
->addRule(function ($control) {
    return preg_match(cely pattern, $control->value);
}, '...!')

mám pravdu ?

Editoval kleinpetr (20. 4. 2015 20:53)