PCRE2 Yii2 pattern PHP7.3

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (6 оценок, среднее: 5,00 из 5)
Загрузка...

В связи с переходом на версию PHP 7.3 перестала работать проверка на корректность введенных данных в форму (yii2 pattern). При отправке формы на проверку yii2 выдает следующую ошибку

preg_match(): Compilation failed: invalid range in character class at offset 6

Ошибка “preg_match(): Compilation failed: invalid range in character class at offset 6” появляется в vendor\yiisoft\yii2\validators\RegularExpressionValidator.php, так как yii2 pattern который находиться в модели не проходит проверку RegularExpressionValidator.php at line 56– preg_match(‘/^[\d\s-\+\(\)]+$/’‘89990000000’) в версии PHP 7.1-7.2 все работало.

preg_match(): Compilation failed: invalid range in character class at offset 6

Для примера взял форму обратной связи (модель обратной связи models\Feedback.php)

yii2 pattern

Изначально была вот такая вот проверка телефона, но перестала работать с переходом на PHP7.3

Так вот, как написано в источнике о переходе в PHP7.3 вместо PCRE на PCRE2

С появлением набора PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL escape-последовательности, такие как \s, допустимые в символьных классах, но не в качестве конца диапазонов, рассматривались как литералы. Примером является [_-\s] (но не [\s -_], потому что это дало ошибку в начале диапазона). Теперь ошибка “недопустимый диапазон” задается независимо от PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL.

Документация PCRE2 pattern

Поставил один знак \ после s и все заработало (‘/^[\d\s\-\+\(\)]+$/’).

5 1 vote
Рейтинг постов

Опубликовано: 15.01.2020 в 20:39

Subscribe
Notify of
guest
1 Комментарий
oldest
newest most voted
Inline Feedbacks
View all comments
sputnik

Да уж, серьезное обновление из-за которого пол дня голову ломал

1
0
Would love your thoughts, please comment.x
()
x