Почему regex /[^а-я]/i реагирует на буквы р, т, ч и т.д

При валидации на сервере php мне потребовалось проверить строку на наличие символов, которые не входят в русский алфавит, для чего было написано выше указанное выражение, которое возвращает 1, если в строке есть хотя бы один символ, не вписывающийся в диапазон [а-я], регистр при этом не учитывается.

Однако по неведомой мне причине это выражение возвращает единицу, если в строке присутствуют символы "р", "т", "ч", хотя они вписываются в диапазон [а-я].

Это не баг моей версии php, так как онлайн сервисы по тестированию regex тоже выдают этот результат. Что не так в моем понимании регулярных выражений?


Ответы (1 шт):

Автор решения: teran

вашем случае к выражению следует добавить флаг u, отвечающий за юникод, и включить в перечень символов букву ё, поскольку она, как ни странно, не входит в указанный диапазон. итого:

/[^а-яё]/iu
→ Ссылка