[英]Yii2 validation with XRegExp, \p{L} not working
我使用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。 它被添加到 \\assets\\AppAsset.php 中的AssetBundle
類中
我在玩正則表達式時確實注意到,當我做錯並顯示異常時, \\\\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}
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.