Возьмем регулярное выражение для нашего пароля — /[0-9a-z]+/i:
- /[0-9a-z]+/ — шаблон, в котором:
- 1) 0-9 — любая цифра.
2) a-z — любая строчная буква от a до z.
3) [] — квадратные скобки означают, что в шаблоне может присутствовать любой из перечисленных в них литералов (в нашем случае цифры и строчные буквы)
4) + — указывает, что данная часть шаблона (т.е. то, что в квадратных скобках) может повторяться один и более раз. - i — флаг, означающий, что регистр символов не имеет значение.
Иными словами, наше регулярное выражение указывает, что пароль может содержать любое количество цифр и букв 1 и более раз (т.е. он может состоять из одной цифры, из одной буквы, из многих цифр, из многих букв, из цифр и букв).
Например, если пользователь введет в поле пароля «2», «a3b» или «leopard», то такой пароль будет считаться корректным. А если, он введет «ab&s» или «24?», то такой пароль корректным считаться не будет, т.к. он содержит спецсимволы, а мы их в регулярном выражении не разрешили.
Надеюсь теперь стало понятно как и зачем можно использовать регулярные выражения, осталось узнать принципы их составления. Собственно говоря, задача составления регулярного выражения сводится к созданию его шаблона. А шаблон, как вы помните, может состоять из литералов и метасимволов.
Начнем с самого простого — литералов:
- Каждый из таких символов представляет сам себя. Например, /abc/ — такому шаблону сопоставима только строка «abc».
- a-z — все строчные буквы от a до z. Например, /a-z/ — такому шаблону сопоставляются 26 строк: «a», «b», «c»… «z»
- A-Z — все заглавные буквы от A до Z.
- 0-9 — все цифры.
Если мы хотим указать, что цифр или букв может быть несколько, то придется использовать управляющие символы:
- * — указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться 0 и более раз. Например, /ab*c/ — означает, что строка начинается с символа a, затем может быть сколько угодно символов b, после которых следует символ c. Т.е. это могут быть, например, такие строки: «ac», «abc», «abbbbbbc» и т.д.
- + — указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться 1 и более раз. Например, /ab+c/ — означает, что строка начинается с символа a, затем может быть сколько угодно символов b (но не меньше 1), после которых следует символ c. Т.е. это могут быть, например, такие строки: «abc», «abbbbbbc» и т.д.
- . — указывает, что на этом месте может быть любой одиночный символ, кроме символа новой строки. Например, для шаблона /ab.c/ сопоставимы такие строки: «ab6c», «abxc», «ab=c» и т.д.
- ? — указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться 0 или 1 раз. Например, /ab?c/ — означает, что строка начинается с символа a, затем может быть или не быть один символ b, после которого следует символ c. Т.е. это могут быть такие строки: «ac», «abc»
- {n} — указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться ровно n раз. Например, /ab{3}c/ — означает, что строка начинается с символа a, затем идут 3 символа b, после которых следует символ c. Т.е. это будет строка «abbbc».
- {n,} — указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться n и более раз. Например, /ab{3,}c/ — означает, что строка начинается с символа a, затем идут 3 или более символов b, после которых следует символ c. Т.е. это могут быть такие строки: «abbbc», «abbbbbbbc» и т.д.
- {n, m} — указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться от n до m раз. Например, /ab{1,3}c/ — означает, что строка начинается с символа a, затем идут от 1 до 3 символов b, после которых следует символ c. Т.е. это могут быть такие строки: «abc», «abbc», «abbbc».
- [] — такой шаблон сопоставим с любым одиночным символом, принадлежащим множеству, определенному в скобках. Множество задается перечислением или указанием диапазона. Например, шаблону /[abc]/ могут быть сопоставимы строки: «a», «b», «c».
- [^] — такой шаблон сопоставим с любым одиночным символом, не принадлежащим множеству, определенному в скобках. Например, шаблону /[^abc]/ могут быть сопоставимы строки: «f», «x», «Z», но не могут быть сопоставимы строки: «a», «b», «c».
- ^ — указывает, что символы сопоставимы с началом строки. Например, шаблону /^abc/ могут быть сопоставимы строки: «abcd», «abcfh», но не могут быть сопоставимы строки: «dabc», «cbabc» и т.д.
- $ — указывает, что символы сопоставимы с концом строки. Например, шаблону /abc$/ могут быть сопоставимы строки: «dabc», «fhabc», но не могут быть сопоставимы строки: «abcd», «abccb» и т.д.
- | — указывает на несколько альтернативных шаблонов. Например, шаблону /ab|c/ будут сопоставимы строки: «ab» и «c».
- \ — служит для экранирования специальных символов, т.е. обратный слэш перед символом указывает на то, что он должен интерпретироваться как специальный. Например:
- 1) \d — соответствует любая цифра от 0 до 9.
2) \D — соответствует все, кроме цифры.
3) \s — соответствует пробел.
4) \S — соответствует все, кроме пробела.
5) \w — соответствует буква, цифра или знак подчеркивания.
6) \W — соответствует все, кроме буквы, цифры или знака подчеркивания.
Например, шаблону /x\d\d/ будут соответствовать строки: «x01», «x25» и т.д., но не будут соответствовать строки: «A15», «x0A»…
Также обратный слэш используется, чтобы специальный символ сделать литеральным. Например, если нам нужно найти строку «a*b», то мы зададим следующий шаблон /a\*b/.
Используя вышеперечисленные литералы и метасимволы, можно составлять какие угодно шаблоны (считай регулярные выражения). Давайте, например, посмотрим что же мы написали для шаблона e-mail в нашем примере:
var adr_pattern=/[0-9a-z_]+@[0-9a-z_]+\.[a-z]{2,5}/i; |
Итак, мы указали, что в адресе электронной почты идут цифры, буквы и знаки подчеркивания 1 и более раз, затем следует символ @, затем снова идут цифры, буквы и знаки подчеркивания 1 и более раз, затем идет символ точки, после которой идут буквы от 2 до 5 раз. Примерно такой вид имеют адреса электронной почты.
Теперь, зная, что именно мы задали в образце, можно проверить работу примера:
Форма регистрации |
Попробуйте ввести e-mail вида «serega@mail» и посмотрите, что будет.
Надо сказать, что составление шаблонов это своего рода искусство. К тому же, одно и то же регулярное выражение можно записать по-разному. Например, /[0-9a-z_]/ — это тоже самое, что и /\w/.
Если хотите потренироваться, то можете усовершенствовать регулярное выражение для проверки e-mail в нашем примере.
Если вы желаете изучить этот язык более подробно, воспользуйтесь учебником в разделе учебники