使用XRegExp进行Yii2验证,\ p {L}无效

时间:2016-05-04 15:37:37

标签: php yii2 yii2-validation xregexp

我正在使用Yii2框架,我有Validator应该进行客户端验证。我有一个看起来像这样的正则表达式:/^[\\p{L}]+$/u为简单起见,但我的实际正则表达式有点复杂,但\ 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}来说总是失败,但是如果我改变了像/ ^ [A-Z] + $ /这样的模式,它就可以完美地运行。

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

中的AssetBundle类中

2 个答案:

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

答案 1 :(得分:0)

在我的情况下,\p{L}被解释为p{L},所以我只是添加了一个反斜杠以逃避p,结果是\\p{L}