Php filter var filter validate email
Example #1 Validating email addresses with filter_var()
$email_a = ‘joe@example.com’ ;
$email_b = ‘bogus’ ;
?php
if ( filter_var ( $email_a , FILTER_VALIDATE_EMAIL )) echo «Email address ‘ $email_a ‘ is considered valid.\n» ;
>
if ( filter_var ( $email_b , FILTER_VALIDATE_EMAIL )) echo «Email address ‘ $email_b ‘ is considered valid.\n» ;
> else echo «Email address ‘ $email_b ‘ is considered invalid.\n» ;
>
?>
The above example will output:
Email address 'joe@example.com' is considered valid. Email address 'bogus' is considered invalid.
Example #2 Validating IP addresses with filter_var()
if ( filter_var ( $ip_a , FILTER_VALIDATE_IP )) echo «IP address ‘ $ip_a ‘ is considered valid.» ;
>
if ( filter_var ( $ip_b , FILTER_VALIDATE_IP )) echo «IP address ‘ $ip_b ‘ is considered valid.» ;
>
?>
The above example will output:
IP address '127.0.0.1' is considered valid.
Example #3 Passing options to filter_var()
$int_a = ‘1’ ;
$int_b = ‘-1’ ;
$int_c = ‘4’ ;
$options = array(
‘options’ => array(
‘min_range’ => 0 ,
‘max_range’ => 3 ,
)
);
if ( filter_var ( $int_a , FILTER_VALIDATE_INT , $options ) !== FALSE ) echo «Integer A ‘ $int_a ‘ is considered valid (between 0 and 3).\n» ;
>
if ( filter_var ( $int_b , FILTER_VALIDATE_INT , $options ) !== FALSE ) echo «Integer B ‘ $int_b ‘ is considered valid (between 0 and 3).\n» ;
>
if ( filter_var ( $int_c , FILTER_VALIDATE_INT , $options ) !== FALSE ) echo «Integer C ‘ $int_c ‘ is considered valid (between 0 and 3).\n» ;
>
?php
$options [ ‘options’ ][ ‘default’ ] = 1 ;
if (( $int_c = filter_var ( $int_c , FILTER_VALIDATE_INT , $options )) !== FALSE ) echo «Integer C ‘ $int_c ‘ is considered valid (between 0 and 3).» ;
>
?>
The above example will output:
Integer A '1' is considered valid (between 0 and 3). Integer C '1' is considered valid (between 0 and 3).
Проверка данных с помощью PHP фильтров
Валидация данных является неотъемлемой частью работы с формами. Не только недопустимые отправленные данные могут привести к проблемам безопасности, но также могут сломать вашу веб-страницу. Сегодня мы рассмотрим, как удалить недопустимые символы и проверить данные с помощью функции «filter_var».
Посмотрите приведенный ниже пример . Пользователь ввел текст «I don’t have one» в качестве домашней страницы. Если эти данные должны были быть введены в базу данных, а затем получены в качестве ссылки, ссылка будет нарушена.
Большинство людей склонны думать о валидации данных как о чрезвычайно утомительном процессе, где нужно:
- Сравнивать данные, которые они хотят проверять, с любой возможной комбинацией, которую они могут придумать.
- Пытаться найти золотое регулярное выражение, которое будет соответствовать любой возможной комбинации.
- Сочетание этих двух пунктов.
Есть очевидные проблемы с перечисленным выше:
К счастью, начиная с версии 5.2, PHP включил отличную функцию, называемую filter_var , которая устраняет трудности проверки данных.
filter_var в действии
filter_var будет делать, оба действия, и санитизировать и проверять данные. В чем разница между ними?
- Санитизация удалит из данных какой-либо некорректный символ.
- Проверка будет определять, находятся ли данные в надлежащей форме.
Примечание: зачем санитизировать, а не просто проверять? Возможно, пользователь случайно набрал неправильный символ или, возможно, ошибка была из-за плохих копирования и вставки. Очищая данные, вы берете на себя ответственность за ошибку пользователя.
Как использовать filter_var
Использование filter_var невероятно просто. Это просто функция PHP, которая принимает две части данных:
Например, приведенный ниже код удалит все теги HTML из строки:
$new_string = filter_var($string, FILTER_SANITIZE_STRING);
// $new_string is now "Hello, World!"
Вот еще один пример — на этот раз сложнее. Приведенный ниже код гарантирует, что значение переменной является допустимым IP-адресом:
$valid_ip = filter_var($ip, FILTER_VALIDATE_IP);
$valid_ip = filter_var($ip, FILTER_VALIDATE_IP);
Вот так просто использовать filter_var . Полный список всех правил, которые вы можете использовать, смотрите в конце этого руководства.
Пример санитизации
Ниже приведен краткий пример очищения входных данных из двух полей: поля электронной почты и поля домашней страницы. В этом примере будут удалены любые символы, которые не должны встречаться в любом типе данных.
echo filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
echo filter_var($_POST['homepage'], FILTER_SANITIZE_URL);
name="form1" method="post" action="form-sanitize.php">
type="text" name="email" value=" echo $_POST['email']; ?>" size="50"/>
type="text" name="homepage" value=" echo $_POST['homepage']; ?>" size="50" />
Используя константы FILTER_SANITIZE_EMAIL и FILTER_SANITIZE_URL , определенные PHP, функция знает, какие символы являются некорректными.
Пример валидации
Просто потому, что данные очищены, не гарантируется, что они правильно отформатированы. В приведенном ниже примере данные не нуждались в санитизации, но очевидно, что вход пользователя не является адресом электронной почты или URL-адресом.
Чтобы обеспечить правильное форматирование данных, их необходимо проверить.
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
if (filter_var($email, FILTER_VALIDATE_EMAIL))
echo "$email is a valid email address.
";
echo "$email is NOT a valid email address.
";
$homepage = filter_var($_POST['homepage'], FILTER_SANITIZE_URL);
if (filter_var($homepage, FILTER_VALIDATE_URL))
echo "$homepage is a valid URL.
";
echo "$homepage is NOT a valid URL.
";
name="form1" method="post" action="form-validate.php">
type="text" name="email" value=" echo $_POST['email']; ?>" size="50"/>
type="text" name="homepage" value=" echo $_POST['homepage']; ?>" size="50" />
Теперь, когда данные были проверены, вы можете быть уверены, что представленная информация — именно то, что вы ищете.
Все вместе: Форма отправки электронной почты
Теперь, когда данные очистки и проверки были рассмотрены, мы будем использовать эти навыки для быстрой отправки электронной почты. Это ни в коем случае не будет иметь качества готового продукта — например, никакая форма не должна требовать домашней страницы, но она будет работать идеально для этого урока. Форма будет содержать 4 части информации:
Мы будем очищать и проверять все 4 части данных и отправлять их по электронной почте, только если все они корректны. Если что-либо не прошло проверку или какие-либо поля пустые, форма будет представлена пользователю вместе со списком элементов для исправления. Мы также вернем обработанные данные пользователю, если он не знает, что определенные символы являются неразрешенными.
Шаг 1 — Создание формы
Для первого шага просто создайте элемент формы с 5 полями: для перечисленных выше и кнопки отправки:
name="form1" method="post" action="form-email.php">
Ещё раз о filter var / PHP. Особенности и фичи
Очень часто приходится сталкиваться с простейшей задачей — валидацией данных из формы или любых других источников (кукисы, заголовок запроса, etc.) И каждый раз 95% разработчиков городят какие-то неимоверные велосипеды (регулярные выражения, «уникальные» алгоритмы хеширования паролей, etc). И каждый раз мне приходится рассказывать о такой невероятно полезной и нужной функции php — filter_var!
Итак, встречаем, встроенная функция валидации данных.
Эта замечательная функция появилась уже давно, в PHP 5.2.0, но до сих пор, очень малый процент разработчиков применяют её, предпочитая свои велосипеды. И это очень зря, ведь Вы используете готовые фреймворки, ORM и другие инструменты? Так почему Вы не валидируете данные встроенными методами?
Фильтры валидации данных
- FILTER_VALIDATE_BOOLEAN — проверяет, что значение является корректным булевым значением. Использует неявное приведение типов. Примеры валидных значений: «1», «true», «on», «yes».
- FILTER_VALIDATE_EMAIL — проверяет, что значение является корректным email.
- FILTER_VALIDATE_FLOAT — проверяет, что значение является корректным числом с плавающей точкой.
- FILTER_VALIDATE_INT — проверяет, что значение является корректным целым числом. Дополнительно можно проверить входит ли значение в определенный диапазон.
- FILTER_VALIDATE_IP — проверяет, что значение является корректным ip-адресом (v4 или v6). Дополнительно можно проверить, что IP соответствует протоколу IPv4 или IPv6, а также отсутствие вхождения в частные или зарезервированные диапазоны.
- FILTER_VALIDATE_REGEXP — Проверяет значение на соответствие regexp, Perl-совместимому регулярному выражению.
- FILTER_VALIDATE_URL — проверяет, что значение является корректным url адресом (в соответствии с RFC 2396).
- FILTER_VALIDATE_INT
- Числа +0 и -0 не пройдут проверку на целые числа, но пройдут ее на числа с плавающей точкой.
- Корректная ссылка может не содержать HTTP-протокол , т.е. необходима еще одна проверка, определяющая наличие необходимого протокола у ссылки, например, ssh:// или mailto:.
- Функция работает только с ASCII-ссылками, таким образом, интернациональные доменные имена (содержащие не-ASCII символы) не пройдут проверку.
- Доменная зона не проверяется на реальность, так что адрес вида [email protected] пройдет валидацию (привет зонам верхнего уровня аля .yandex).
Примеры
[email protected]', FILTER_VALIDATE_EMAIL); // [email protected] filter_var('d#fh$df%[email protected]', FILTER_VALIDATE_EMAIL); // d#fh$df%[email protected] то есть верно! filter_var('[email protected]', FILTER_VALIDATE_EMAIL); // [email protected] то есть верно! filter_var('имя-на-русском@сайтец.рф', FILTER_VALIDATE_EMAIL); // false filter_var('@site.b', FILTER_VALIDATE_EMAIL); // false // FILTER_VALIDATE_FLOAT filter_var(1, FILTER_VALIDATE_FLOAT); // 1 filter_var(0, FILTER_VALIDATE_FLOAT); // 0 filter_var(1.1, FILTER_VALIDATE_FLOAT); // 1.1 filter_var(true, FILTER_VALIDATE_FLOAT); // 1 filter_var( '1,1', FILTER_VALIDATE_FLOAT, array('options' => array('decimal' => ',')) ); // 1.1 filter_var('1,1', FILTER_VALIDATE_FLOAT); // false filter_var('1,000,000', FILTER_VALIDATE_FLOAT); // false filter_var('1,000,000', FILTER_VALIDATE_FLOAT, FILTER_FLAG_ALLOW_THOUSAND); // 1000000 // FILTER_VALIDATE_INT filter_var(1, FILTER_VALIDATE_INT); // 1 filter_var(0, FILTER_VALIDATE_INT); // 0 filter_var(true, FILTER_VALIDATE_INT); // 1 filter_var('3', FILTER_VALIDATE_INT); // 3 filter_var('3.2', FILTER_VALIDATE_INT); // false filter_var( 22, FILTER_VALIDATE_INT, array('options' => array('min_range' => 30)) ); // false filter_var( 32, FILTER_VALIDATE_INT, array('options' => array('min_range' => 30)) ); // 32 // FILTER_FLAG_ALLOW_OCTAL filter_var(032, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_OCTAL); // 26 // FILTER_FLAG_ALLOW_HEX filter_var(0x32, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX); // 50 // FILTER_VALIDATE_IP filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP); // 127.0.0.1 filter_var('10.0.0.0', FILTER_VALIDATE_IP); // 10.0.0.0 // FILTER_FLAG_IPV6 filter_var('10.0.0.0', FILTER_VALIDATE_IP, FILTER_FLAG_IPV6); // false filter_var( '2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d', FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ); // 2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d // FILTER_FLAG_NO_PRIV_RANGE filter_var('10.0.0.0', FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE); // false filter_var('33.35.73.255', FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE); // 33.35.73.255 // FILTER_FLAG_NO_RES_RANGE filter_var('0.0.0.0', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE); // false filter_var('10.0.0.0', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE); // 10.0.0.0 // FILTER_VALIDATE_REGEXP filter_var( 'hello world', FILTER_VALIDATE_REGEXP, array('options'=>array('regexp'=>'/^h/is')) ); // hello world filter_var( 'world hello', FILTER_VALIDATE_REGEXP, array('options'=>array('regexp'=>'/^h/is')) ); // false filter_var( 'hello world', FILTER_VALIDATE_REGEXP, array('options'=>array('regexp'=>'/5+/is')) ); // false filter_var( '22 543 24', FILTER_VALIDATE_REGEXP, array('options'=>array('regexp'=>'/8+/is')) ); // 22 543 24 // FILTER_VALIDATE_URL filter_var('http://somesite.com', FILTER_VALIDATE_URL); // http://somesite.com filter_var('http://какой-то-сайт.рф', FILTER_VALIDATE_URL); // false filter_var('http://#%$%#^^.com', FILTER_VALIDATE_URL); // false filter_var('somesite.com', FILTER_VALIDATE_URL); // false filter_var('torrent://somesite.com', FILTER_VALIDATE_URL); // torrent://somesite.com // FILTER_FLAG_PATH_REQUIRED filter_var( 'http://somesite.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED ); // false filter_var( 'http://somesite.com/test', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED ); // http://somesite.com/test // FILTER_FLAG_QUERY_REQUIRED filter_var( 'http://somesite.com', FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED ); // false filter_var( 'http://somesite.com?test', FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED ); // http://somesite.com?test // FILTER_FLAG_PATH_REQUIRED | FILTER_FLAG_QUERY_REQUIRED filter_var( 'http://somesite.com/test?test', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED | FILTER_FLAG_QUERY_REQUIRED ); // http://somesite.com?test ?>