Проверка Yii2 с XRegExp, \p{L} не работает
Я использую Yii2 Framework и у меня есть 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
1 ответ
Я заметил, когда я играл с моим регулярным выражением, что, когда я сделал это неправильно и получил исключение, \\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}
.