Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

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

#javascript #регулярные_выражения


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


Ответы

Ответ 1



A-яA-z А-Яа-яA-Za-z Про Ёё не забыл - она есть дальше в оригинальном выражении. PS: Сколько ж можно...

Ответ 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ЁёәіңғүұқөһӘІҢҒҮҰҚӨҺ]*$/

Комментариев нет:

Отправить комментарий