2016-05-04 9 views
0

Ich benutze Yii2 Framework und ich habe eine Validator, die Client-seitige Validierung tun sollte. Ich habe eine Regex, die wie folgt aussieht: /^[\\p{L}]+$/u der Einfachheit halber, aber meine eigentliche Regex ist ein bisschen komplizierter, aber der \ p {L} Teil ist, was die Probleme verursacht.Yii2 Validierung mit XRegExp, p {L} funktioniert nicht

Und so mein Code wie folgt in der Validator-Klasse:

public function clientValidateAttribute($model, $attribute, $view) 
{ 
    $message = json_encode($this->message, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); 
    return <<<JS 
    if (!XRegExp('/^[\\p{L}]+$/u').test(value)) { 
     messages.push($message); 
    } 
JS; 
} 

Problem ist, das nicht klappt immer für \ p {L} aber, wenn ich das Muster für etwas ändern wie/^ [AZ] + $/Es funktioniert einwandfrei.

Ich benutze die 1.3.0 xregexp-all.js. Es wird hinzugefügt, um in einer AssetBundle Klasse in \ assets \ AppAsset.php

+0

was '\ P', habe ich noch nie zuvor gesehen in regex –

+0

@MuhammadShahzad "\ p {L} oder \ p {letter}. Jede Art von Brief von jeder Sprache" . Quelle: [link] (http://www.regular-expressions.info/unicode.html) – DaTi

+0

was willst du eigentlich machen? –

Antwort

0

ich bemerkt haben, während ich um mit meiner regex spiele, dass, wenn ich es falsch gemacht und wurde eine Ausnahme gezeigt, \\p{L} als p{L} interpretiert wurde. Nach einigen Versuchen habe ich herausgefunden, dass ich aus irgendeinem Grund vier Backslashes brauchte, um es als \p{L} interpretiert zu bekommen. Endgültiger Code, das funktioniert:

public function clientValidateAttribute($model, $attribute, $view) 
{ 
    $message = json_encode($this->message, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); 
    return <<<JS 
    if(!XRegExp('^[\\\\p{L}]+$').test(value)) { 
     messages.push($message); 
    } 
JS; 
}