Почему regex /[^а-я]/i реагирует на буквы р, т, ч и т.д
При валидации на сервере php мне потребовалось проверить строку на наличие символов, которые не входят в русский алфавит, для чего было написано выше указанное выражение, которое возвращает 1, если в строке есть хотя бы один символ, не вписывающийся в диапазон [а-я], регистр при этом не учитывается.
Однако по неведомой мне причине это выражение возвращает единицу, если в строке присутствуют символы "р", "т", "ч", хотя они вписываются в диапазон [а-я].
Это не баг моей версии php, так как онлайн сервисы по тестированию regex тоже выдают этот результат. Что не так в моем понимании регулярных выражений?
Ответы (1 шт):
вашем случае к выражению следует добавить флаг u, отвечающий за юникод, и включить в перечень символов букву ё, поскольку она, как ни странно, не входит в указанный диапазон. итого:
/[^а-яё]/iu