Yii2 验证 XRegExp,\p{L} 不工作

Yii2 validation with XRegExp, \p{L} not working

我正在使用 Yii2 框架并且我有一个 Validator 应该进行客户端验证。我有一个看起来像这样的正则表达式:/^[\p{L}]+$/u 为了简单起见,但我的实际正则表达式有点复杂,但 \p{L} 部分是导致问题的原因。

所以我在验证器中的代码是这样的 class:

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。它被添加到 AssetBundle class in \assets\AppAsset.php

我在玩我的正则表达式时确实注意到,当我弄错并显示异常时,\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;
}

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