Php regex is email

PHP Формы — Проверка имени, E-mail и URL

В данной статье, мы рассмотрим возможности PHP проверить, корректно ли в форме указан адрес электронной почты (email), имя пользователя и URL-адрес.

Проверка валидности имени на PHP

В приведенном ниже коде показан простой способ проверки валидности введённого пользователем имени. Согласно регулярке в поле name можно вводить только латинские буквы, дефисы, апострофы и пробелы. Если значение поля имени не соответствует шаблону, то в переменную $nameErr сохраним сообщение об ошибке:

Примечание: Функция preg_match() ищет в строке $name шаблон, возвращая true , если шаблон существует, и false , если данные в строке не соответсвуют шаблону.

Но что если нужно, чтобы имя было ТОЛЬКО на латинице или ТОЛЬКО на кирилице и ограничить длину до 30 символов? Например, для полных имён типа «Максим Максимов-Суханов» или «Maxim Maximov-Sukhanov», естественно только на одном из языков регулярное выражение примет следующий вид (бонусом можно писать украинские имена):

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

Примечание: Не забывайте про букву «Ё», которая не входит в диапазон «А-Я» и её нужно указывать отдельно!

Читайте также:  Php первая буква заглавная остальные строчные

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

Как известно email состоит из двух основных частей — username@hostname. Локальная часть email-адреса — это то, что перед знаком «@»(ASCII-код 64), а часть после знака — это домен получателя. Локальная часть может иметь длину до 64 символов, а имя домена может содержать не более 253 символов.

Локальная часть может включать прописные и строчные латинские буквы (A – Z, a – z) (ASCII: 65–90, 97–122), цифры от 0 до 9 (ASCII: 48–57), специальные символы: # — _ ~! $ & ‘() * +,; =: и %20, точка(.), ASCII 46, при условии, что она не является первым или последним символом, а также при условии, что она не идет последовательно (например, Max..Fax@example.com не допускается).

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

Реализуем проверку email разложив её на сосотавляющие, алгоритм которых следует предписаниям стандарта RFC 2822:

$email = test_input($_POST[«email»]);
$user = ‘[a-zA-Z0-9_\-\.\+\^!#\$%&*+\/\=\?`\|\~\’]+’; // локальная часть
$domain = ‘(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.?)+’; // домен
$ipv4 = ‘8(\.5)’; // ip-адрес по протоколу ipv4
$ipv6 = ‘[0-9a-fA-F](\:[0-9a-fA-F])’; // ip-адрес по протоколу ipv6

if (!preg_match(«/^$user@($domain|(\[($ipv4|$ipv6)\]))$/», $email) $emailErr = «Некорректно введён email»;
>
?>

Данная регулярка удобна тем, что шаблоны для разных частей формата email-адреса объявляются отдельно. Валидацию пройдут email не только с буквенными именами почтового домена, но и почтовым сервером, представленным в виде ip адреса.

Главный минус этой регулярного выражения в том, что его нужно постоянно корректировать в соответствие изменениям в названиях email-адресов. Например, домены с русскими именами в зоне «.рф» регулярка выше уже не пропустит.

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

$email = test_input($_POST[«email»]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $emailErr = «Некорректно введён email»;
>
?>

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

Проверка URL-адреса в PHP

Используя код из приведенного ниже примера, мы можем проверить, содержит ли поле нашей формы действительный URL-адрес. Обратите внимание, что в URL-адресе в этом случае разрешены как слэши (/) , так и дефисы (-) . Если введенное значение не соответствует условиям, то пользователю будет отображено сообщение об ошибке:

Проверка имени, email и URL-адреса в PHP

Объединим все рассмотренные выше все проверки полей ввода в одной форме и напишем следующий код:

Пример

 else < $name = test_input($_POST["name"]); // проверяем, содержит ли имя только буквы и пробелы if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) < $nameErr = "Имя должно содержать только буквы и пробелы"; >> if (empty($_POST["email"])) < $emailErr = "Введите Email"; >else < $email = test_input($_POST["email"]); // проверьте, правильно ли сформирован адрес электронной почты if (!filter_var($email, FILTER_VALIDATE_EMAIL)) < $emailErr = "Неверный формат электронной почты"; >> if (empty($_POST["website"])) < $website = ""; >else < $website = test_input($_POST["website"]); // проверьте, правильность синтаксиса URL-адреса if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|. ;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) < $websiteErr = "Некорректный URL"; >> if (empty($_POST["comment"])) < $comment = ""; >else < $comment = test_input($_POST["comment"]); >if (empty($_POST["education"])) < $educationErr = "Выберите образование"; >else < $education = test_input($_POST["education"]); >?> 

Вы можете попытаться ввести корректные и некорректные данные в представленной выше форме и посмотреть работу, написанного в этом уроке, сценария 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 Forms — Validate E-mail and URL

This chapter shows how to validate names, e-mails, and URLs.

PHP — Validate Name

The code below shows a simple way to check if the name field only contains letters, dashes, apostrophes and whitespaces. If the value of the name field is not valid, then store an error message:

$name = test_input($_POST[«name»]);
if (!preg_match(«/^[a-zA-Z-‘ ]*$/»,$name)) $nameErr = «Only letters and white space allowed»;
>

The preg_match() function searches a string for pattern, returning true if the pattern exists, and false otherwise.

PHP — Validate E-mail

The easiest and safest way to check whether an email address is well-formed is to use PHP’s filter_var() function.

In the code below, if the e-mail address is not well-formed, then store an error message:

$email = test_input($_POST[«email»]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $emailErr = «Invalid email format»;
>

PHP — Validate URL

The code below shows a way to check if a URL address syntax is valid (this regular expression also allows dashes in the URL). If the URL address syntax is not valid, then store an error message:

PHP — Validate Name, E-mail, and URL

Now, the script looks like this:

Example

// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = «»;
$name = $email = $gender = $comment = $website = «»;

if ($_SERVER[«REQUEST_METHOD»] == «POST») if (empty($_POST[«name»])) $nameErr = «Name is required»;
> else $name = test_input($_POST[«name»]);
// check if name only contains letters and whitespace
if (!preg_match(«/^[a-zA-Z-‘ ]*$/»,$name)) $nameErr = «Only letters and white space allowed»;
>
>

if (empty($_POST[«email»])) $emailErr = «Email is required»;
> else $email = test_input($_POST[«email»]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $emailErr = «Invalid email format»;
>
>

if (empty($_POST[«website»])) $website = «»;
> else $website = test_input($_POST[«website»]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
if (!preg_match(«/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|. ;]*[-a-z0-9+&@#\/%=~_|]/i»,$website)) $websiteErr = «Invalid URL»;
>
>

if (empty($_POST[«comment»])) $comment = «»;
> else $comment = test_input($_POST[«comment»]);
>

if (empty($_POST[«gender»])) $genderErr = «Gender is required»;
> else $gender = test_input($_POST[«gender»]);
>
>
?>

The next step is to show how to prevent the form from emptying all the input fields when the user submits the form.

Источник

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