Изучаем регулярные выражения самостоятельно – диапазоны ( часть 4 )

Альтернатива в регулярных выражениях — это некая группа символов, которой может соответствовать какой-то символ из строки, если этот символ указан в этой группе.
Эта группа символов задаётся в квадратных скобках и ей может соответствовать только один символ.
Для примера, напишем регулярное выражение, которое содержит какую-то альтернативу из чисел 9, 7 и 3.
var str = 'b7c'; var reg = /b[973]c/; alert(reg.test(str));// true
Если откроем этот пример в браузере мы увидим, что результатом проверки является true. Это потому что цифра 7 из строки есть в заданной альтернативе ( [973] ), в регулярном выражении.
Если мы в строке вместо цифры 7 напишем цифру 5, например, то, строка уже не будет соответствовать регулярному выражению, потому что цифры 5 нет в альтернативе.
То есть, строка будет соответствовать регулярному выражению только в случаях, когда между буквами b и c будет либо цифра 9, либо 7, либо 3.
Если мы между этими буквами напишем число из двух чисел, например, ‘ b73c ‘, то строка не будет соответствовать регулярному выражению, потому что заданная альтернатива применятся только к первой цифры 7. А для цифры 3 нужно написать ещё одну альтернативу. Вот так:
var str = 'b73c'; var reg = /b[973][973]c/; alert(reg.test(str));// true
Отрицательные альтернативы
Отрицание альтернативы делается с помощью символа ' ^ '. Если мы его добавим в начале альтернативы то, это будет означать что данной альтернативы будет соответствовать все символы, кроме указанных.
Например:
var str = '7ффффф'; var reg = /^[^587]ф/; alert(reg.test(str));// false
Результатом проверки является false, потому что цифра 7 из строки, указана в отрицательной альтернативе. Он также будет false, если вместо 7 напишем 5 или 8.
Другими словами, данной альтернативе будет соответствовать все символы, кроме цифр 5,8 и 7.
Диапазоны в регулярных выражениях
Диапазон это некая группа из одного или больше интервалов.
Интервал это уже последовательность идущих подряд символов. Например, интервалом может быть алфавит букв от ' а ' до ' я ' или числа от ' 0 ' до ' 9 '.
Диапазон часто используется в случаях, когда необходимо указать что символ из строки должен быть буквой или цифрой. И для того чтобы в квадратных скобках не написать весь алфавит от ‘a’ до ‘z’ нужно написать диапазон '[a-z]'. Тоже самое для цифр, чтобы не писать все цифры от 0 до 9 можно написать диапазон чисел '[0-9]'.
Для демонстрации, напишем простой пример:
var str = 'b7'; var reg = /^[a-z][0-9]/; alert(reg.test(str));// true
Такому регулярному выражению будет соответствовать любая комбинация символов, которая состоит из одной буквы и одной цифры. Например, a3, b2, t0, t3, z8, z0 и так далее.
В приведённом примере мы указали что первым символом в строке, должна быть любая английская буква в нижнем регистре, а вторым символом должна быть любая цифра от 0 до 9.
А как написать диапазон в случае если мы хотим указать что, первый символ из строки может быть либо буквой, либо цифрой?
Для этого нужно объединить диапазон букв и диапазон цифр таким вот образом ' [a-z0-9] '.
Теперь, первый символ может быть буквой или цифрой.
var str = '8ффффф'; var reg = /^[a-z0-9]/; alert(reg.test(str));// true
Результатом проверки является true, потому что цифра 8 входит в указанный диапазон. Если мы уберём цифру 8 и напишем какую-то русскую букву, либо большую английскую букву, либо какой-то спец символ то, результатом проверки будет уже false.
var str = 'дффффф'; var reg = /^[a-z0-9]/; alert(reg.test(str));// false
Результат является false потому что русская буква ' д ' не входит в указанный диапазон. Мы в диапазоне указали интервал английских букв, а не русских. Если мы вместо 'a-z' напишем 'а-я', то результатом проверки будет уже true. Обратите внимание что буква ' а ' из интервала русских букв должна быть написана русским языком. То есть должно быть русская буква 'а’, а не английская.
var str = 'дффффф'; var reg = /^[а-я0-9]/; alert(reg.test(str));// true
Если мы хотим указать что символ может быть русской буквой, или английской буквой или цифрой то, в существующем диапазоне нужно добавить и интервал английских букв, таким вот образом: [a-zа-я0-9].
По умолчанию регистр важен, поэтому если первый символ из строки в данном примере, будет написан в верхнем регистре то результатом проверки будет уже false.
var str = 'Дффффф'; var reg = /^[a-zа-я0-9]/; alert(reg.test(str));// false
Результат проверки является false, потому что большая буква Д, не входит ни в один из указанных интервалов. Поэтому если мы хотим, чтобы данный символ соответствовал нашему диапазону, необходимо добавить в него и интервал больших русских букв. Также сразу добавим и интервал больших английских букв. После этих добавлений, наш диапазон будет выглядеть вот так: ' [a-zа-яA-ZА-Я0-9] '.
Теперь, если мы заново запустим наш предыдущий пример, то мы увидим, что результатом проверки является уже true.
var str = 'Дффффф'; var reg = /^[a-zа-яA-ZА-Я0-9]/; alert(reg.test(str));// true
Такому диапазону может соответствовать такие типы символов: маленькие английские буквы, маленькие русские буквы, большие английские буквы, большие русские буквы и цифры от 0 до 9.
Отрицательные диапазоны в регулярных выражениях
Отрицание диапазона также делается с помощью символа ' ^ '. Если мы добавим этот символ в начале диапазона то, такому диапазону будет соответствовать все символы кроме те, которые в нём указаны.
В отрицательный диапазон добавляются те интервалы, которым мы не хотим, чтобы соответствовал символ из строки.
Например, мы не хотим, чтобы первый символ в название логина был цифрой. Для этого нам нужно добавить в регулярное выражение отрицательный диапазон чисел от 0 до 9.
var str = '1login'; var reg = /^[^0-9]/; alert(reg.test(str));// false
Результатом проверки является false, потому что в начале строки находится именно число которая входит в указанный отрицательный диапазон. Если мы изменим диапазон с 2 до 9, то результатом проверки будет уже true.
var str = '1login'; var reg = /^[^2-9]/; alert(reg.test(str));// true
Результат true, потому что цифра 1, не входит в указанный отрицательный диапазон.
Такой же результат будет если мы вообще уберём цифру из строки. Ведь нам именно этого и нужно, чтобы название логина началось с буквы, а не с цифры.
var str = 'userlogin'; var reg = /^[^0-9]/; alert(reg.test(str));// true
Напоследок, хочу заметить, что альтернатива также является диапазоном. Так написано в справочнике по регулярным выражениям, в главе ' Диапазоны '.
Ну и на этом, пожалуй, закончим данную статью. Теперь Вы знаете что такое альтернативы и диапазоны в регулярных выражениях. Где и как их использовать, а также как отрицать какую-то альтернативу или какого-то диапазона.
Задачи
- Напишите альтернативу в регулярное выражение, которой бы соответствовало один из любых этих символов: x либо y либо z либо 0.
- Подумайте, как можно написать сразу несколько диапазонов подряд, используя один из квантификаторов повторений. Чтобы мы не писали вручную для каждого символа свой диапазон. Например, мы должны указать что в названии почты, до символа собачки '@' должны быть только маленькие буквы и цифры.
- Напишите регулярное выражение в которой нужно указать что, в конце строки не должно быть ни одной буквы. То есть, например, строка '30' будет соответствовать этому регулярному выражению, а такая строка '30лет' нет.
Похожие статьи:
Понравилась статья?
Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.
Поделиться с друзьями:
Подписаться на новые статьи:
Поддержите пожалуйста мой проект!
Если у Вас есть какие-то вопросы или предложения, то можете писать их в комментариях или мне на почту sergiu1607@gmail.com. И если Вы заметили какую-то ошибку в статье, то прошу Вас, сообщите мне об этом, и в ближайшее время я всё исправлю.
Добавляйтесь ко мне в друзья в:
Добавляйтесь в мои группы:
Подпишитесь на мои каналы:
Автор статьи: Мунтян Сергей
Копирование материалов с сайта sozdatisite.ru ЗАПРЕЩЕНО!!!
Дата добавления: %date%