Почему диапазон A-z включает в себя дополнительные символы, кроме букв?

133
09 июня 2019, 19:30

/^[\-\.\s\'A-яA-zЁёәіңғүұқөһӘІҢҒҮҰҚӨҺ]*$/ - это регулярное выражение почему-то пропускает ^\_. Как правильно написать, чтобы оно не пропускало эти символы?

Answer 1
A-яA-z
А-Яа-яA-Za-z

Про Ёё не забыл - она есть дальше в оригинальном выражении.

PS: Сколько ж можно...

Answer 2

Обновлено с уточнениями по кодировкам

Рассмотрим таблицу ASCII символов (взята отсюда):

- работает как указатель на диапазон символов.

Рассмотрим, что включает в себя диапазон символов A-z согласно таблице.
Этот диапазон включает в себя символы с 65 по 122, среди которых помимо букв латинского алфавита в разном регистре присутствуют \, ^ и _. Как раз те символы, которые вы не планировали включать в выражение, но, по неосторожности, включили.

С русскими символами тоже все не так просто. В Unicode почти все буквы русского алфавита в верхнем и нижнем регистре (кроме ё и Ё) укладываются в диапазон 0410 - 044F. У Ё код 0401, а у ё код 0451.
Поэтому приходится формировать такой диапазон для букв русского алфавита: [а-яА-ЯЁё]. Здесь вы все сделали правильно.

Для справки: в javascript можно пользоваться и альтернативным синтаксисом диапазона для русских букв: [\u0410-\u044f\u0401\u0451], что полностью эквивалентно [а-яА-ЯЁё].

Вывод здесь один: надо осторожнее пользоваться диапазонами.

В вашем случае необходимо вместо A-яA-z использовать а-яА-Яa-zA-Z. Полный пример:

/^[\-\.\s\'а-яА-Яa-zA-ZЁёәіңғүұқөһӘІҢҒҮҰҚӨҺ]*$/
READ ALSO
Странный illegal string offset или base64

Странный illegal string offset или base64

Есть загрузка в массив картинки в формате base64

111
Проверка ID в БД

Проверка ID в БД

Есть таблица в БД db_zadanie, в ней хранятся "id", "user", "iduser","text"

137
Фильтр записей используя WP_Query и пагинацию

Фильтр записей используя WP_Query и пагинацию

Есть форма с 2 кнопками(последние и популярные), при выборе должно выводить записи соответствующиеТ

98
Регулярные выражения PHP Метасимволы

Регулярные выражения PHP Метасимволы

есть строка с вариантами ответа в виде { }{ }{ { } } нужно написать регулярки для того чтобы открыть скобки, то что внутри скобок не важно, чисто...

138