Найпростіший і безпечний спосіб перевірити, чи правильно сформована адреса електронної пошти - це використовувати filter_var()
функцію:
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// invalid emailaddress
}
Крім того, ви можете перевірити, чи визначає домен MX
запис:
if (!checkdnsrr($domain, 'MX')) {
// domain is not valid
}
Але це все ще не гарантує існування пошти. Єдиний спосіб дізнатися це - надіслати електронною поштою підтвердження.
Тепер, коли у вас є проста відповідь, не соромтесь читати про перевірку адреси електронної пошти, якщо ви хочете дізнатися чи іншим способом просто скористатися швидкою відповіддю та рухатися далі. Немає образ.
Спроба перевірити адресу електронної пошти за допомогою регулярного вираження - це "неможливе" завдання. Я б хотів сказати, що той підсумок, який ви зробили, марний. Існує три rfc щодо електронних адрес і написання регулярних виразів, щоб зловити неправильні електронні адреси, і в той же час не мають помилкових позитивів - те, що жоден смертний не може зробити. Ознайомтеся з цим списком щодо тестів (як невдалих, так і успішних) регулярних виразів, використовуваних функцією PHP filter_var()
.
Навіть вбудовані функції PHP, клієнти електронної пошти чи сервери не підходять до цього. Все-таки в більшості випадків filter_var
це найкращий варіант.
Якщо ви хочете знати, який шаблон регексу PHP (в даний час) використовує для перевірки адрес електронної пошти, перегляньте джерело PHP .
Якщо ви хочете дізнатися більше про адреси електронної пошти, я пропоную вам почати читати технічні характеристики, але я повинен попередити вас, що прочитати їх непросто на будь-якому протязі:
Зауважте, що filter_var()
, як уже було зазначено, доступно лише для PHP 5.2. Якщо ви хочете, щоб він працював з більш ранніми версіями PHP, ви можете використовувати регулярний вираз, який використовується в PHP:
<?php
$pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';
$emailaddress = 'test@gmail.com';
if (preg_match($pattern, $emailaddress) === 1) {
// emailaddress is valid
}
PS Примітка про схему регулярного вираження, що використовується вище (з джерела PHP). Схоже, є деякі авторські права на Майкла Раштона . Як зазначалося: "Не соромтеся користуватися цим кодом і перерозподіляти його. Але будь ласка, зберігайте це повідомлення про авторські права".
validateEmail
було б багряно, як і мимохідь$email
, ні$EMAIL
.