2016-05-04 52 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; 
}