Возвращает TRUE для значений "1", "true", "on" и "yes". Иначе возвращает FALSE .
Если установлен флаг FILTER_NULL_ON_FAILURE , то FALSE возвращается только для значений "0", "false", "off", "no" и "", а NULL будет возвращен для всех небулевых значений.
Проверяет, корректны ли длины меток имен домена.
Проверяет доменные имена на соответствие RFC 1034, RFC 1035, RFC 952, RFC 1123, RFC 2732, RFC 2181 и RFC 1123. Опциональный флаг FILTER_FLAG_HOSTNAME добавляет возможность специально проверять имена хостов (они должны начинаться с букв, либо цифр и содержать только буквы, цифры и тире).
Проверяет, что значение является корректным e-mail.
В целом, происходит проверка синтаксиса адреса в соответствии с RFC 822, за исключением того, что не поддерживаются комментарии, схлопывание пробельных символов и доменные имена без точек.
С PHP 5.4.11 числа +0 и -0 проверяются как целые числа, так и числа с плавающей запятой ( FILTER_VALIDATE_FLOAT и FILTER_VALIDATE_INT ). До PHP 5.4.11 они проходили проверку только как числа с плавающей запятой ( FILTER_VALIDATE_FLOAT ).
Если задан default , то значение default будет подставлено, если проверка провалилась.
Всем здравствуйте!
Помогите, пожалуйста, разобраться с корректной валидацией email.
Есть HTML форма (в примере представлена часть формы для email) :
Понимаю, что надо использовать FILTER_VALIDATE_EMAIL , но куда именно нужно вписать "образец", по которому будет происходить дальнейшее сравнение внесенных в форму данных?
Есть мысль оформить общий подход к валидации email так:
1 вариант:
Если в данное поле формы было что-то введено if(isset($_POST["email"])), то начинаем осуществлять проверку на корректность вносимых данных, а именно:
использовать if(!filter_var($_POST[’email’], FILTER_VALIDATE_EMAIL)).
Если введенные данные корректны (то есть соответствуют изначально заданному шаблону, например $var = "anyword@domain.ru";), то продолжаем работу по другим полям формы.
А Если введенные данные некорректны, то отправляем значение в массив ошибок ($errors) и выводим предупреждение об этом ( $errors[’email’] = "Не валидный email";). А если никакие данные не были введены, то "пустое" значение тоже отправляется в этот же массив ошибок ($errors) , для него установлено уже свое сообщение ($errors[’email’] = "Не заполнено обязательное поле";).
2 вариант:
Если было отправлено пустое поле email, то присваеваем полученное значение в массив ошибок и выдаем сообщение "Не заполнено обязательное поле" (как это есть в части представленного кода), иначе если поле email было не пустым (какие-то данные все же были введены), то начинаем проверку: Если внесенные данные некорректны (то есть соответствуют изначально заданному шаблону, например $var = "anyword@domain.ru";), значит полученный результат отправлять в массив ошибок с выдачей сообщения "Не валидный email". Иначе (если полученный результат корректен), то продолжаем двигаться по проверке других форм.
Самый главный вопрос:
в каком месте кода необходимо задать этот шаблон/образец ($var = "anyword@domain.ru),по которому будет происходить сравнение введенной почты на ее корректность; чтобы все работало так как нужно, и чтоб этот образец нигде в браузере не всплывал ?
Заранее благодарю за помощь!
- Вопрос задан более двух лет назад
- 4104 просмотра
Кому интересно – вот решение:
Надо было убрать отрицание перед filter_var($_POST["email"]. и т.д.
И задавать шаблон/ образец, как было в примере w3school, не надо.
Все работает так, как нужно.
Я использую PHP 5.3.10. Это код:
Он возвращает: "Email: test@example.c правильно.
Я думаю, что домен верхнего уровня с одним символом неверен (я не знаю о TLD с одним символом в соответствии с этим списком: http://data.iana.org/TLD/tlds-alpha-by-domain.txt ).
Итак, фильтр FILTER_VALIDATE_EMAIL работает правильно или нет?
Проверка адресов электронной почты немного сложна. Взгляните на этот список:
Действительные адреса электронной почты
- niceandsimple@example.com
- very.common@example.com
- a.little.lengthy.but.fine@dept.example.com
- disposable.style.email.with+symbol@example.com
- пользователь @ [IPv6: 2001: db8: 1 и след :: A0B: dbd0]
- "much.more необычный" @ example.com
- "very.unusual.@.unusual.com"@example.com
- "very. (),:; <> [] ". ОЧЕНЬ. "очень @ " очень ". необычный" @ strange.example.com
- postbox @ com (домены верхнего уровня являются допустимыми именами хостов)
- admin @ mailserver1 (локальное доменное имя без TLD)
- !#$%&’*+-/=?^_`<>|
.a "@ example.org
Недействительные адреса электронной почты
- Abc.example.com (символ @ должен разделять локальные и доменные части)
- A @ b @ c @ example.com (только один @ разрешен для внешних кавычек)
- a "b (c) d, e: f; gi [j k] l@example.com (ни один из специальных символов в этой локальной части не разрешен для внешних кавычек)
- просто «не» right@example.com (цитируемые строки должны быть разделены точками или единственным элементом, составляющим локальную часть)
- это «не allowed@example.com (пробелы, кавычки и обратные косые черты могут существовать только в том случае, когда в цитированных строках и предшествует обратная косая черта)
- этот still "not allowed@example.com (даже если экранированный (которому предшествует обратная косая черта), пробелы, кавычки и обратные косые черты все равно должны содержаться в кавычках)
Все самые все проверки подлинности электронной почты «прослушиваются», но реализация php отлично подходит для работы, поскольку она принимает все распространенные адреса электронной почты
Относительно «частичных» адресов нет. в части домена комментарий в исходном коде (в ext / filter / logical_filters.c) оправдывает это отклонение, таким образом:
И вот ссылка на класс от Майкла Раштона (ссылка сломана см. Источник ниже), который поддерживает как RFC 5321/5322
Edit 2016: В PHP 7.1 beta я заметил следующее:
- Внедрена проверка подлинности электронной почты в соответствии с RFC 6531. (Лео Фейер, Анатоль).
И некоторые приятные дополнительные примеры
FILTER_VALIDATE_EMAIL не поддерживает PHP 5.2.14
Существует PHP-класс для кода Google для проверки адресов электронной почты: