Проверка 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}.

Другие вопросы по тегам