2008-10-02 4 views
7

Мне нужно подтвердить адрес электронной почты моих пользователей. К сожалению, сделать валидатор, что comforms to standards трудноЕсть ли библиотека php для проверки адреса электронной почты?

Here является примером выражения регулярных выражений, который пытается comform к стандартному

Есть ли библиотека PHP (желательно с открытым кодом), который проверяет адрес электронной почты?

+0

мы говорим по электронной почте или по электронной почте? – Sietse 2008-10-02 12:15:25

+0

Я имел ввиду адрес электронной почты. Я исправил свой вопрос, чтобы это отразить. Спасибо – MrValdez 2008-10-03 04:50:05

ответ

5

Я нашел библиотеку в Google Code: http://code.google.com/p/php-email-address-validation/

Существуют ли какие-либо другие?

+0

Я использую его предшественника в нескольких проектах и ​​до сих пор не имел никаких проблем. Я говорю, иди за ним. – Lasar 2008-10-02 10:02:29

16

Вы посмотрели PHP's filter_ functions? Они не идеальны, но у меня есть довольно приличная работа в моем опыте.

Пример использования (возвращает булево):

filter_var($someEmail, FILTER_VALIDATE_EMAIL);

+0

Я кодирую простое (не-Enterprise) приложение, которое нуждается в базовом валидаторе. Хотя FILTER_VALIDATE_EMAIL, похоже, не полностью реализует спецификацию, например, он не выполняет некоторые тесты на http://code.iamcal.com/php/rfc822/rfc822.phps - кажется, это «достаточно хорошо», для моих текущих потребностей. Благодаря! – 2008-10-20 15:28:58

12

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

Как вы указываете на ссылку на известное регулярное выражение мамонта, проверка всех форм адреса электронной почты является сложной, почти невозможной. Это так легко сделать неправильно, даже для простых писем стилей (я обнаружил, что слишком много сайтов отклоняют кепки в адресах электронной почты! И большинство старых регулярных выражений отклоняют TLD более чем из четырех букв!).

AFAIK, «Jean-Luc B. O'Grady» @ example.com и e = mc^2 @ [82.128.45.117] являются действительными адресами ... Хотя I-Made-It-Up @ Absurd- Домен -Name.info скорее всего недействителен.

Так или иначе, я просто хотел бы проверить, что у нас есть что-то уникальное @, что-то еще, и пойдите с ним: он поймает большинство ошибок пользователя (например, пустое поле или имя пользователя вместо адреса электронной почты).
Если пользователь хочет дать поддельный адрес, он просто даст что-то случайное, выглядящее правильно (см. На сайте@on.tv или [email protected]). И никакой валидатор не поймает опечатки ([email protected], а не [email protected]).

Если вы действительно хотите проверить электронные письма против полного RFC, я бы посоветовал использовать регулярные выражения для разделения вокруг @, а затем проверить отдельно локальное имя и доменное имя. Отдельный случай локального имени, начинающийся с «из других случаев и т. Д.» Отдельный случай доменного имени, начинающийся с [из других случаев и т. Д. Разделить проблему в небольших конкретных доменах и использовать регулярные выражения только в четко определенных, более простых случаях.
Это советы могут быть применены к много регулярных выражений использует, конечно ...

+0

Это правильный ответ и то, что я обычно делаю. Но для этого конкретного клиента мне нужен был способ проверить, действительно ли электронное письмо действительно. Альтернатива проверке подлинности электронной почты просит пользователя ввести свои письма дважды, что я категорически опровергаю. Надеюсь, я могу убедить их не делать этого. – MrValdez 2008-10-02 10:43:49

+0

Что случилось с двойным входом? Это быстрый, дешевый и простой способ убедиться, что пользователь не толкнул свой адрес электронной почты при вводе его. Если вы действительно хотите проверить, что адрес электронной почты имеет допустимый формат, ответ Доминика (и связанный сайт), похоже, содержит самую полную информацию, которую я видел еще. – afrazier 2010-05-15 14:51:47

1

Zend_Validate включает электронный валидатор

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

0

Я бы рекомендовал посмотреть исходный код Zend_Validate_EmailAddress [source].

как только вы ваши зависимости фиксированной вы можете просто сделать следующее:

$mail_validator = new Zend_Validate_EmailAddress(); 
$mail_validator->isValid($address); // returns true or false 

Лучше всего было бы, чтобы получить полную библиотеку Zend в свой проект с помощью SVN внешней и указать включать путь к нему ...

но вы можете просто скачать необходимые файлы (1, 2, 3, 4, 5, 6), и включить их все (удалить require_once вызовы)

8

Cal Henderson (от Flickr) написал RFC822 compliant email address matcher с разъяснением RFC и кода, использующего RFC для соответствия адресам электронной почты. Я использую его довольно долгое время без каких-либо жалоб.

RFC822 (опубликовано в 1982 г.) определяет, среди прочего, формат Интернет текстовых сообщений (электронная почта) адреса. Вы можете найти RFC на googling - их много много из их онлайн. Они немного кратки, и странно отформатированы, но с небольшим усилием мы можем сделать это, .

... Обновление ...

Как Porges отметил в комментариях, библиотека по ссылке устарела, но эта страница имеет ссылку на updated version.

10

[ОБНОВЛЕНО] Я собрал все, что я знаю о проверке адреса электронной почты здесь: http://isemail.info, который теперь не только проверяет, но и диагностирует проблемы с адресами электронной почты. Я согласен со многими комментариями здесь, что валидация является лишь частью ответа; см. мое эссе по адресу http://isemail.info/about.

Я сейчас собрал тестовые кейсы от Cal Henderson, Dave Child, Phil Haack, Doug Lovell и RFC 3696. Всего 158 тестовых адресов.

Я провел все эти тесты со всеми валидаторами, которых я мог найти. Сравнение здесь: http://www.dominicsayers.com/isemail

Я постараюсь сохранить эту страницу в актуальном состоянии, так как люди повышают эффективность своих валидаторов. Благодаря Cal, Dave и Phil за помощь и сотрудничество в компиляции этих тестов и конструктивной критике my own validator.

Люди должны знать о errata against RFC 3696 в частности. Три из канонических примеров на самом деле являются неверными адресами. И максимальная длина адреса составляет 254 или 256 символов, не 320.

Смежные вопросы