- PHP Формы — Проверка имени, E-mail и URL
- Проверка валидности имени на PHP
- Проверка правильности email на PHP
- Проверка URL-адреса в PHP
- Проверка имени, email и URL-адреса в PHP
- Пример
- Проверка правильности email на PHP
- Валидация email с использованием регулярного выражения PHP
- PHP Forms — Validate E-mail and URL
- PHP — Validate Name
- PHP — Validate E-mail
- PHP — Validate URL
- PHP — Validate Name, E-mail, and URL
- Example
PHP Формы — Проверка имени, E-mail и URL
В данной статье, мы рассмотрим возможности PHP проверить, корректно ли в форме указан адрес электронной почты (email), имя пользователя и URL-адрес.
Проверка валидности имени на PHP
В приведенном ниже коде показан простой способ проверки валидности введённого пользователем имени. Согласно регулярке в поле name можно вводить только латинские буквы, дефисы, апострофы и пробелы. Если значение поля имени не соответствует шаблону, то в переменную $nameErr сохраним сообщение об ошибке:
Примечание: Функция preg_match() ищет в строке $name шаблон, возвращая true , если шаблон существует, и false , если данные в строке не соответсвуют шаблону.
Но что если нужно, чтобы имя было ТОЛЬКО на латинице или ТОЛЬКО на кирилице и ограничить длину до 30 символов? Например, для полных имён типа «Максим Максимов-Суханов» или «Maxim Maximov-Sukhanov», естественно только на одном из языков регулярное выражение примет следующий вид (бонусом можно писать украинские имена):
или более строгий вариант выражения без прочих символов и в котором первая буква строки должна быть в верхнем регистре, а все остальные в нижнем:
Примечание: Не забывайте про букву «Ё», которая не входит в диапазон «А-Я» и её нужно указывать отдельно!
Проверка правильности 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 = ‘9(\.8)’; // ip-адрес по протоколу ipv4
$ipv6 = ‘[0-9a-fA-F](\:[0-9a-fA-F])’; // ip-адрес по протоколу ipv6
?php
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»;
>
?>
?php
Рекомендуем использовать именно этот способ проверки 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 на 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 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 = «»;
?php
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.