Я использую 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}, но если я изменяю шаблон для чего-то вроде / ^ [A-Z] + $ /, это работает безупречно.
Я использую 1.3.0 xregexp-all.js. Добавляется в AssetBundle
класс в \ 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;
}
Других решений пока нет …