Изучаем регулярные выражения самостоятельно – диапазоны ( часть 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

Напоследок, хочу заметить, что альтернатива также является диапазоном. Так написано в справочнике по регулярным выражениям, в главе ' Диапазоны '.

Ну и на этом, пожалуй, закончим данную статью. Теперь Вы знаете что такое альтернативы и диапазоны в регулярных выражениях. Где и как их использовать, а также как отрицать какую-то альтернативу или какого-то диапазона.

Задачи

  1. Напишите альтернативу в регулярное выражение, которой бы соответствовало один из любых этих символов: x либо y либо z либо 0.
  2. Подумайте, как можно написать сразу несколько диапазонов подряд, используя один из квантификаторов повторений. Чтобы мы не писали вручную для каждого символа свой диапазон. Например, мы должны указать что в названии почты, до символа собачки '@' должны быть только маленькие буквы и цифры.
  3. Напишите регулярное выражение в которой нужно указать что, в конце строки не должно быть ни одной буквы. То есть, например, строка '30' будет соответствовать этому регулярному выражению, а такая строка '30лет' нет.

Понравилась статья?

Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.

Поделиться с друзьями:

Подписаться на новые статьи:

Delivered by FeedBurner

Поддержите пожалуйста мой проект!

<< Предыдущая статьяСледующая статья >>

Если у Вас есть какие-то вопросы или предложения, то можете писать их в комментариях или мне на почту sergiu920@mail.ru. И если Вы заметили какую-то ошибку в статье, то прошу Вас, сообщите мне об этом, и в ближайшее время я всё исправлю.

Добавляйтесь ко мне в друзья в:

Добавляйтесь в мои группы:

Подпишитесь на мои каналы:

Автор статьи: Мунтян Сергей

Копирование материалов с сайта sozdatisite.ru ЗАПРЕЩЕНО!!!

Дата добавления: 2017-01-28 02:41:08