2016-05-04 103 views
0

我使用Yii2框架,我有一個Validator應該做客戶端驗證。我有一個正則表達式,看起來像這樣:/^[\\p{L}]+$/u爲簡單起見,但我的實際正則表達式有點複雜,但\ p {L}部分是導致問題的原因。Yii2驗證與XRegExp, p {L}不工作

所以我的代碼,這樣的驗證器類:

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; 
} 

問題是,這個總是失敗的\ p {L}但如果我換着花樣的東西像/^[AZ] + $ /它的工作完美無瑕。

我正在使用1.3.0 xregexp-all.js。它被添加到在AssetBundle類\資產\ AppAsset.php

+0

是什麼'\ p',我以前沒有在正則表達式看到 –

+0

@MuhammadShahzad「\ p {L}和\ p {}信:任何類型的任何語言的字母」 。來源:[鏈接](http://www.regular-expressions.info/unicode.html) – DaTi

+0

你究竟想做什麼? –

回答

0

我沒有通知我和我的正則表達式播放時左右,當我把它錯了,並且顯示出了異常,\\p{L}被解釋爲p{L}。所以經過一些嘗試後,我發現無論出於什麼原因,我需要四個反斜槓才能將其解釋爲\p{L}。最終代碼的工作原理:

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; 
}