@spido

Где ошибка в регулярном выражении?

Приветствую!
Сделал регулярное выражение, но оно в PHP работает как-то нестабильно, иногда неправильно срабатывает, оно же в JS работает хорошо.
Можете исправить мои ошибки, которую я не вижу?
Задача регулярного выражения: разрешает только буквы, цифры латинские и кириллицы, пробел, символы /-_.,!)(?
Почему-то пропускает в тексте символы @ ^ хотя они не разрешены.
/^[а-яА-ЯёЁa-zA-Z0-9\/-_.,!)(?^\\s]+$/
https://regexr.com/6trn4
Заранее спасибо откликнувшимся!
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
@spido Автор вопроса
Я сделал вот такой вариант: /^[a-zA-Z\p{Cyrillic}0-9\/_.,!)(?\s\-]+$/u
И он в PHP7 вроде правильно работает.
Я тут эксперта пригласил, может он свой вариант предложит.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Не помню, как в JS, но в PHP точно должно быть \s.

И - (тире) должен быть последним символом в строке, то есть после него должна идти уже закрывающая скобка, либо надо ескейпить \-. А в таком виде тире говорит все символы от "/" и до "_", включительно, а это не много ни мало 49 символов, в том числе и "@" (см. таблицу ASCII).

P.S. И символ ^ (каретки) у вас именно разрешён, прямо в самой строке.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
~^[ a-zа-яё/_.,!)(?-]*$~ui
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы