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}
.
我正在使用 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}
.