Php валидация email регулярное выражение

Валидация email

Перед тем как писать валидацию, надо знать из чего состоит email адрес. Думаю известно всем что это «username@hostname». Лучше всего будет разбить создание регэкспа на 2 логические части — валидация hostname и валидация username. Начнём с более объёмного.

Валидация hostname

Для начала подумаем, а из чего же состоит hostname?

Имя хоста состоит из нескольких компонентов, разделённых точкой и не превышающих 63 символа, и суффиксов (домены первого уровня). Компоненты, в свою очередь, состоят из латинских букв, цифр и дефисов, причём дефисы не могут быть в начале или в конце компонента. Суффиксы это ограниченный список доменов первого уровня (я нашёл список на сайте IANA). Для упрощения выражения запишем домены стран как [a-z][a-z] (любые 2 символа от a до z не зависимо от регистра). Так же не будем использовать не латинские символы, пока они официально не введены в публичное пользование. В итоге получим выражение проверяющее суффикс (конструкция (foo|bar) говорит о том что происходит поиск либо foo либо bar, т.е. заменяет или):

Для компонентов код будет посложнее:

[a-z0-9] # обязательная буква латинского алфавита или цифра
([-a-z0-9][a-z0-9])? # необязательная часть
\. # точка

Рассмотрим необязательную часть:

# дефис ставиться на первое место в группе символов, иначе он принимается за промежуток
# после группы символов означает, что группа может повторятся от 0 до 61 раза
[-a-z0-9]
# 61 для того, чтобы в группе не было более 63 символов в сумме
[a-z0-9]

В итоге мы получили выражение отвечающее за проверку hostname:

Обращу внимание на то, что присутствие компонентов не обязательно, т.к. некоторые домены первого уровня поддерживаются серверами. Пример.

Валидация username

  • латиницу
  • цифры
  • знаки! # $ % & ‘ * + — / =? ^ _ ` < | >~
  • точку, за исключением первого и последнего знака, которая не может повторятся

На самом деле тут все просто: 1 или более символ [-a-z0-9!#$%&’*+/=?^_`<|>~] , далее 0 или больше компонентов \.[-a-z0-9!#$%&’*+/=?^_`<|>~]+ .

В итоге

Это выражение можно каплю оптимизировать (про оптимизацию, я думаю, будет отдельная статья):

Бонус

Рассмотрим регэксп, который привели в пример в комментарии к вступительному топику:

  • Так как username может состоять из любых символов кроме пробелов, username «日本国» является валидным.
  • Домен первого уровня может состоять из любых 4 латинских букв, например .habr
  • Ужасная проверка домена: 1 или более символов, обязательная точка, 2-4 обязательных символа, необязательная точка, 0-4 символа в прибавок. Причём каждый из этих блоков сохраняется в память.
Читайте также:  Java application name manifest

P.S. Пишите о багах и пожеланиях — обязательно исправлю.
P.P.S. По желанию могу выложить функцию проверки email, используюмую мной.

Источник

Проверка правильности email на PHP

Проверка правильного формата вводимых данных очень важна в любых информационных системах. В данной статье, мы рассмотрим возможности PHP проверить, корректно ли указан адрес электронной почты (email). Обращу внимание, что речь идет лишь о проверке корректной структуры адреса. Дело в том, что адрес, может либо быть корректным (т.е. валидным), но при этом не существовать. Например, пользователь может просто ошибиться символом при вводе. Поэтому задача данной статьи – отсеять заведомо некорректные значения для email.

Как известно email состоит из двух основных частей. Например, адрес: MyEmail@myssite.ru.

Здесь, MyEmail – это непосредственный адрес (или логин) пользователя, а myssite.ru – адрес сайта, которому соответствует электронная почта.

Следовательно, проверка адреса на валидность заключается в том, что он должен соответствовать структуре:

логин_пользователя@доменное_имя.доменная_зона

В итоге, задача сводилась к построению регулярного выражения для проверки, соответствует ли проверяемая стока допустимым символам и структуре email. Но, начиная с PHP 5.2, появилась возможность выполнить эту проверку встроенной функцией filter_var(). Пример такой проверки:

$email = "MyEmail@mysite.ru";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) echo "Адрес указан корректно.";
>else echo "Адрес указан не правильно.";
>

В первый параметр функции указывается строковое значение, которое нужно проверить. Второй параметр – это идентификатор применяемого фильтра (в данном случае для проверки email). Функция filter_var() универсальна и может быть использована для проверки различных значений – числовое значение, логическое или проверка валидности IP-адреса.

Валидация email с использованием регулярного выражения PHP

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

$email = "MyEmail@mysite.ru";
if (preg_match("/^(?:[a-z0-9]+(?:[-_.]?[a-z0-9]+)?@[a-z0-9_.-]+(?:\.?[a-z0-9]+)?\.[a-z])$/i", $email)) echo "Адрес указан корректно.";
>else echo "Адрес указан не правильно.";
>

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

Источник

Проверка данных регулярными выражениями

Сборник регулярных выражений с примерами на PHP для проверки данных из полей форм.

Проверка чисел

$text = '1'; if (preg_match("/^\d+$/", $text)) < echo 'yes'; >else

Числа с плавающей точкой (разделитель точка):

$text = '-1.0'; if (preg_match("/^\-?\d+(\.\d)?$/", $text)) < echo 'yes'; >else

Проверка даты по формату

$text = '02.12.2018'; if (preg_match("/^(08|[12]6|3[01])[\.](04|1[012])[\.](19|20)\d\d$/", $text)) < echo 'yes'; >else
$text = '2018-04-02'; if (preg_match("/^5-(06|1[012])-(02|14|23|3[01])$/", $text)) < echo 'yes'; >else

Проверка номера телефона

Ориентировано на российские мобильные + городские с кодом из 3 цифр.

$text = '+7(495)000-00-00'; if (preg_match("/^((8|\+7)[\- ]?)?(\(?\d\)?[\- ]?)?[\d\- ]$/", $text)) < echo 'yes'; >else

Проверка E-mail

$text = 'mail@snipp.ru'; if (preg_match("/^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]$/i", $text)) < echo 'yes'; >else

Логин

Латинские буквы, цифры, — и _ .

$text = 'admin-1'; if (preg_match("/^[a-z0-9_-]$/i", $text)) < echo 'yes'; >else

Проверка md5-хэша

$text = 'ca040cb5d6c2ba8909417ef6b8810e2e'; if (preg_match("/^[a-f0-9]$/", $text)) < echo 'yes'; >else

Цвета

Шестнадцатеричные коды цветов #FFF и #FFFFFF .

$text = '#fff'; if (preg_match("/^#(?:(?:[a-fd]))$/i", $text)) < echo 'yes'; >else

IP адреса

$text = '192.168.0.1'; if (preg_match("/^((251|22\d|[01]?\d\d?)\.)(251|21\d|[01]?\d\d?)$/", $text)) < echo 'yes'; >else
$text = '2001:DB8:3C4D:7777:260:3EFF:FE15:9501'; if (preg_match("/((^|:)([0-9a-fA-F]))$/i", $text)) < echo 'yes'; >else

Комментарии

Другие публикации

Маски ввода для текстовых полей

Применение масок ввода у полей форм значительно упрощает их использование, уменьшает количество ошибок и приводит.

Читайте также:  Css div wrapper class

date() – форматирование даты PHP

Генерация случайных буквенно-цифровых кодов в PHP

Несколько примеров, как сгенерировать случайные последовательности численных и буквенных строк заданной длины и.

Работа с FTP в PHP

Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.

Виртуальные коды клавиш (Virtual-Key Codes)

В следующей таблице приведены имена констант (VK Codes), десятичные и шестнадцатеричные значения для кодов виртуальных.

Загрузка файлов на сервер PHP

В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.

Источник

Email regex PHP

The regular expressions below can be used to validate if a string is an email address and to extract email addresses from a string. This validation method however does not guarantee that the emails validated and extracted actually exist.

The basic validation

A simple PHP regex to validate string against email format and catch the most obvious syntax errors:

Enter a text in the input above to see the result

[email protected]'); // returns 1 // Extract email addresses from a string $extract_email_pattern = '/\\S+@\\S+\\.\\S+/'; $string_to_match = 'You can reach me out at [email protected] and [email protected]'; preg_match_all($extract_email_pattern, $string_to_match, $matches); // matches[0] is ['[email protected]', '[email protected]'] 

The more complex email regex

This PHP regular expression will match 99% of valid email addresses and will not pass validation for email addresses that have, for instance:

But at the same time it will allow part after @ to be IP address.

Enter a text in the input above to see the result

 

RFC 5322 compliant regex

This PHP regular expression is compliant to RFC 5322 standard which allows for the most complete validation. Usually, you should not use it because it is an overkill. In most cases apps are not able to handle all emails that this regex allows.

Enter a text in the input above to see the result

Extra information about validating email

As was stated previously, PHP regex email validation can not fully guarantee that email exists and the message can be delivered. The best way how to know for sure that email is valid is to actually send an email to that address because even paid email validation services do not provide a 100% guarantee for that.

It’s better to use filter_var in most cases:

Create an internal tool with UI Bakery

Discover UI Bakery – an intuitive visual internal tools builder.

PHP регулярное выражение email и доверие пользователей

От автора: доверяй, но пользователей своих проверяй! Особенно правильность ввода ими адресов почтовых ящиков. А то ни рассылки, ни маркетинга и клиентов вам не видать. Да и обидно, понимаешь, когда тебя «обманывают» и вводят какую-то «абракадабру»! Поэтому сегодня научимся, как создавать PHP регулярное выражение email.

Основы

Любой адрес электронного почтового ящика состоит из двух частей: левая (до «собаки») и правая (после «собаки»). Будет развивать наш успех постепенно, и реализуем проверку ввода эти составляющих «мыла».

PHP регулярное выражение email и доверие пользователей

Онлайн курс «PHP-разработчик»

Изучите курс и создайте полноценный проект — облачное хранилище файлов

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

Продолжим расширять наше PHP регулярное выражение для проверки email. В «дособачную» часть добавим еще несколько правил:

Email может начинаться с цифры, с маленькой или большой буквы.

В середине «дособачины» может использоваться нижнее подчеркивание, дефис (экранированный слешем), а затем любой символ.

PHP регулярное выражение email и доверие пользователей

«Допилим» часть шаблона после собаки:

PHP регулярное выражение email и доверие пользователей

Во второй части выражения PHP проверка email построена по тем же канонам. Единственное, на что стоит обратить внимание, это экранированная точка и знак доллара. Он означает окончание строки.

Скептицизм

Но лучше с регулярками сильно «не напрягаться». Особенно при валидации формата адреса «мыла». Пользователь может придумать такой адрес, который ему вздумается. Поэтому «обуздать» его, предусмотреть все «а если» практически невозможно.

Для примера покажу вам, какой может быть регулярка для PHP проверки email на валидность:

PHP регулярное выражение email и доверие пользователей

Сами понимаете, что такое «страхолюдие» боязно даже в скрипт вставлять :). Работает или не работает, не знаю. Да и проверять не хочу.

Многие эксперты придерживаются в этом вопросе минимализма. Они считают, что главным атрибутом, который должен присутствовать в email, это «собака». Все остальное неважно! И я сними согласен.

Предположим, что к вам зашел пользователь, адрес «мыла» которого «не пролазит» в установленные регуляркой рамки. Ну, и что дальше? Скорее всего, человек просто плюнет и уйдет. И сколько таких «наплевавших» ушло с вашего сайта, вы не будете знать.

Представляю вам самый идеальный шаблон для проверки email:

Источник

Оцените статью