Обучение персонала на высшем уровне, обучение персонала для любой компании.

Проверка почтового адреса (email)

Довольно распространенная задача - проверить введенный email на корректность. Разумеется, проверить работоспособность почтового ящика можно только посылкой на него сообщения с линком активации, но все же часто требуется проверить хотя бы визуальную корректность того, что ввел пользователь.

public function checkMail($mail) {$mail=trim($this->pregtrim($mail));if (strlen($mail)==0) return 1;if (!preg_match("/^[a-z.0-9_-]{1,20}@(([a-z0-9-]+\.)+(com|net|org|mil|"."edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-"."9]{1,3}\.[0-9]{1,3})$/is",$mail))return -1;return $mail;}

На первом шаге функция отрезает лишние пробелы и опасные символы. Затем, если вдруг окажется, что мы верезали все, тогда возвращаем ошибку с кодом 1. Затем идет довольно сложный, для начинающих регэксп, который проверяет наличие неадекватных символов в введенной строке, если он их находит, тогда возвращается код ошибки -1, в обратном случае мы имеем нормальный адрес, который и возвращается.

Теперь я постораюсь объяснить, что же происходит внутри регулярного выражения. Символ ^ обозначает отрицание, то есть мы определяем маску, которая ищет символы не описанные регулярным выражением, а именно, мы ищем символы которые не являются латиницей a-z, символ точки, цифры от 0 до 9, символ подчеркивания и символ тире, причем таких символов должно быть от 1 до 20. Затем следует собака. Далее проверяется домен: [a-z0-9-] значит, что регэксп ищет латициницу, цифры, символ тире и точку, после которой следует один из перечисленных доменных имен - com/net/org/mil и т.п. затем, после точки, несколько символов на домен верхнего уровня.

Честно говоря, я поначалу тоже не понимал как они устроены, однако гугл и некоторое количество пива помогли решить эту проблему ;)