0

我正在使用 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} 总是失败,但如果我改变类似 /^[AZ]+$/ 的模式,它可以完美地工作。

我正在使用 1.3.0 xregexp-all.js。它被添加到AssetBundle\assets\AppAsset.php 的一个类中

4

2 回答 2

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;
}
于 2016-05-05T13:33:03.740 回答
0

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

于 2020-04-21T14:12:40.700 回答