8xx8 (Андрей Кулаков)

Творческая мастерская

Полезные в работе регулярные выражения

| Comments

Зачастую в рабочем процессе требуется проверить данные введённые пользователем или полученные из другого источника.

Данная задача элегантно решается с помощью регулярных выражений.

Привожу далее список регулярных выражений используемых мной. Данный список будет пополняться с течением времени. Если есть предложения чем пополнить его, пишите.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
 * Юзернейм
 *
 * Буквы, цифры, дефисы и подчёркивания, от 3 до 16 символов.
 * Начинаться должно всегда с буквы латинского алффавита
 */
    preg_match('%^[a-z][a-z0-9_-]{3,16}$%', $userName);

/*
 * Пароль
 *
 * То же что и юзер нейм только от 6 символов и может начинаться с цыфры
 */
    preg_match('%^[a-z0-9_-]{6,18}$%', $password);

/*
 * XML тег
 *
 * За открывающей скобкой < должно стоять слово из букв — имя элемента, затем могут быть атрибуты
 * — любые символы, кроме закрывающей скобки >. Далее — любой текст (содержимое) и закрывающий тэг,
 * т.е. <имя />, или как минимум один пробел, слэш и закрывающаю скобка (самозакрывающийся тэг).
 */
    preg_match('%<([a-z]+)([^>]+)*(?:>(.*)</\1>|\s+/>)$%', $xmlTag);

/*
 * Email
 *
 * Общий вид — логин@поддомен.домен. Логин, как и поддомен — слова из букв, цифр, подчёркиваний,
 * дефисов и точек. А домен (имеется в виду 1го уровня) — это от 2 до 6 букв и точек.
 */
    preg_match('%^([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z\.]{2,6})$%', $email);

/*
 * URL
 *
 * Первым делом — необязательный протокол (http:// или https://), затем последовательность букв,
 * цифр, дефисов, подчёркиваний и точек (домены уровня > 1), потом домен нулевого уровня (от 2 до
 * 6 букв и точек) и, наконец, файловая структура — набор слов из букв, цифр, дефисов, подчёркиваний
 * и точек со слэшем в конце. Всё это может завершаться опять-таки слэшем.
 */
    preg_match('%^(https?://)?([\da-z\.-]+)\.([a-z\.]{2,6})([/\w \.-]*)*/?$%', $url);
/*
 * IP адрес
 *
 * 4 группы цифр (от 1 до 3 цифр в каждой) разделены точками. Если группа состоит из 3 символов,
 * то первый из них — 1 или 2; если 1, то остальные от 0 до 9, а если 2 — то второй от 0 до 5;
 * если второй символ от 0 до 4, то третий — от 0 до 9, а если второй 5 — то третий от 0 до 5.
 * Если же группа состоит из 2 символов, то первый — от 1 до 9, второй — от 0 до 9. В случае
 * односимвольной группы этим символом может быть цифра от 1 до 9.
 */
    preg_match('%^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$%', $ip);

/*
 * Комментаррии CSS
 * Находим первое вхождение слеш звёздочка, далее берём любой символ или последовательность
 * слеш звёздочка, пока не встретится последовательность звёздочка слеш. Квантификатор не жадный, по этому
 * матчит ближайшие открывающие и закгрывающие вхождения оставляя внутри открывающие
 */
    preg_match_all("%/\*(.|[^/*])*?\*/\s+%i", $cssCode, $comments);

Comments