Електронний маркетинг та автоматизація маркетингу електронною поштоюCRM та платформи даних

Як перевірити електронну адресу за допомогою регулярних виразів (regex)

Практично кожна мова програмування сьогодні підтримує регулярні вирази. Хоча деяким розробникам вони не подобаються, вони справді є найкращою практикою, оскільки зазвичай виконують такі функції, як перевірка, надзвичайно швидко з меншими ресурсами сервера. Адреси електронної пошти є чудовим прикладом... де їх можна легко перевірити, щоб переконатися, що вони правильно відформатовані.

Майте на увазі, що перевірка – ні перевірка. Перевірка просто означає, що передані дані відповідають стандартному формату, який правильно побудований. Деякі цікаві речі про адреси електронної пошти, які можна пропустити під час перевірки.

Скільки може бути адреса електронної пошти?

Мені довелося сьогодні копати, щоб знайти його, але чи знаєте ви, яка дійсна довжина адреси електронної пошти? Це насправді розбито на частини ... Name@Domain.com. Це згідно з RFC2822.

  1. Ім'я може складати від 1 до 64 символів.
  2. Домен може містити від 1 до 255 символів.

Це означає, що це може бути дійсна електронна адреса:

loremaipsumadolorasitaametbaconsectetueraadipiscin
gaelitanullamc@loremaipsumadolorasitaametbaconsect
etueraadipiscingaelitcaSedaidametusautanisiavehicu
laaluctuscaPellentesqueatinciduntbadiamaidacondimn
tumarutrumbaturpisamassaaconsectetueraarcubaeuatin
ciduntaliberoaaugueavestibulumaeratcaPhasellusatin
ciduntaturpisaduis.com

Спробуйте вписати це на візитну картку! За іронією долі, більшість полів електронної адреси обмежені 100 символами в Інтернеті… що технічно неправильно. Деякі інші регулярні вирази, які використовуються для перевірки адрес електронної пошти, також шукають 3-значний домен верхнього рівня, наприклад .com; однак немає обмежень щодо тривалості домени верхнього рівня (напр. Martech Zone має 4 цифри – .zone).

Стандартизація адрес електронної пошти набагато складніша, ніж ви собі уявляєте. Якщо написати за стандартом, ось справжній регулярний вираз для адреси електронної пошти, кредит на Регулярний вираз:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

HTML5 навіть не потребує перевірки

Найпростіший спосіб переконатися, що електронна пошта дійсна відповідно до стандарту, — це використати поле введення електронної пошти HTML5:

<input type='email' name='email' placeholder='name@domain.com' />

Однак бувають випадки, коли ваша веб-програма все одно захоче перевірити адресу електронної пошти як у браузері під час введення, так і під час надсилання на ваш сервер.

Регулярний вираз для правильної електронної адреси в PHP

Мало хто це усвідомлює, але PHP тепер має вбудований стандарт RFC функція перевірки фільтра.

if(filter_var("name@domain.com", FILTER_VALIDATE_EMAIL)) {
    // Valid
}
else {
    // Not Valid
}

Регулярний вираз для правильної електронної адреси в Javascript

Вам не обов’язково мати надто складний стандарт для перевірки структури електронної адреси. Ось простий спосіб використання JavaScript.

function validateEmail(email) 
{
    var re = /\\S+@\\S+/;
    return re.test(email);
}

Звичайно, це не відповідає стандарту RFC, тому ви можете перевірити кожен розділ даних, щоб переконатися, що він дійсний. Цей регулярний вираз відповідатиме приблизно 99.9% електронних адрес. Це не зовсім стандартне, але корисне практично для будь-якого проекту.

function validateEmail(email) 
{
  var re = /^(?:[a-z0-9!#$%&amp;'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&amp;'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/;

  return re.test(email);
}

Заслуга в цих прикладах належить HTML.form.guide.

Douglas Karr

Douglas Karr є засновником Martech Zone та визнаний експерт з цифрової трансформації. Дуг - це Основний доповідач та маркетинговий спікер. Він віце-президент і співзасновник Highbridge, фірма, що спеціалізується на допомозі компаніям-компаніям цифрово трансформувати та максимізувати свої технологічні інвестиції, використовуючи технології Salesforce. Він розробив цифровий маркетинг та стратегії продуктів для Технології Dell, GoDaddy, Salesforce, Веб-тренди, і SmartFOCUS. Дуглас також є автором Корпоративні блоги для чайників і співавтор Краща ділова книга.

Статті по темі

41 Коментарі

  1. Для форм з кількома адресами електронної пошти було б добре зробити class = ”emailaddress”. Якщо у вас є бібліотека prototype.js (http://www.prototypejs.org) на сторінці, ви можете зробити щось подібне:

    var дійсний = true;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. emailaddress'). кожна (функція (електронна пошта) {
    if (! filter.test (email.value)) {
    попередження (? Будь ласка, вкажіть дійсну електронну адресу?);
    email.focus;
    дійсний = хибний;
    }
    });
    повернення дійсне;

  2. Мені ця ідея подобається, але я б вагався прийняти саме цей регулярний вираз, не описуючи, які юридичні адреси електронної пошти він не приймає та які нелегальні адреси дозволяє.

    Приклад регулярного виразу, який виконує гідну роботу поряд із поясненням, яких випадків він не охоплює, див.

    http://www.regular-expressions.info/email.html

    Я особисто віддаю перевагу висвітленню більшості простих випадків і винесенню попередження за все інше, а не відхиленню. Якщо Боб дійсно хоче, щоб подати bob@com.museum а не bob@museum.com, чому не дозволити йому?

    1. Привіт Рег,

      Ви можете протестувати регулярний вираз, використовуючи Онлайн тестер регулярних виразів.

      Крім того, безумовно, можна зробити набагато більше, якщо ви хочете забезпечити адресу електронної пошти діє згідно з RFC.

      Є кілька причин не дозволяти комусь вводити недійсну електронну адресу:
      1. Вони будуть дратуватися на вас, коли електронна пошта, яку вони очікували, не проходить - незалежно від того, чи не з вашої вини, адресу було введено неправильно.
      2. Якщо com.museum був дійсним доменом і, скажімо, Yahoo! керував нею - будь-яка адреса електронної пошти, що відскочить, негативно позначиться на репутації вашої компанії щодо доставки електронної пошти. Це може призвести до блокування всієї електронної пошти вашої компанії.
      3. Якщо ваш постачальник послуг електронної пошти дозволив вам увійти bob@com.museum, ви також заплатите за кожен електронний лист, надісланий на цю електронну адресу, доки вони не відпишуться на цю адресу через відмови. Я б уникав будь-якого ESP, який дозволив би вказати недійсну електронну адресу - вони просто беруть ваші гроші!

      Дякуємо за зупинку!
      Doug

  3. Існує набагато простіший спосіб написати вираз:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - З остаточним модифікатором / i немає потреби вказувати верхній регістр.
    - Я не знаю жодного TLD з цифрами в ньому.
    У додатковій записці я дозволяю TLD до 6 символів; нові регулярно надходять, і ви ніколи не знаєте (ну, у деяких майбутніх, можливо, навіть є цифри, я знаю).

  4. Привіт там,

    Я намагаюся використовувати це в існуючій формі в режимі реального часу, але, схоже, це не перевіряє в реальному часі, як перевірка надійності вашого пароля ...

    Або я просто такий безглуздий, і це не працює для мене?

    1. Здається, він також не обробляє символ плюса, який є дійсним.

      Див: http://www.dominicsayers.com/isemail/

      Якщо говорити ширше, це ключова проблема вирізання та вставлення коду, яка сама по собі заслуговує на повне обговорення.

      @ robbyslaughter.com

  5. Просто невелика корекція: регулярний вираз має в кінці додатковий () +. Він повинен читати:

    ^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$

    З першим буде прийнято будь-які довжини TLD (що не є суттєво неправильним, як зазначають інші, але якби це було намір, вираз можна було б скоротити).

  6. Чи можете ви пояснити регулярний вираз цього коду і як він працює? Також про .test - чи є .test типовим твердженням у javascript для перевірки речей, як це було зроблено у коді вище?

  7. Це короткий код для виразу електронної пошти -

    функція validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    повернути emailPattern.test (id);

    }
    Діпак Рай
    варанасі

  8. Дякую, але в цьому регулярному виразі є помилка. Я не фахівець з регулярних виразів, але спробував надіслати електронною поштою:

    test @ test

    і він пройшов регулярний вираз ... Я помітив, що йому не вистачає "". так повинно бути:

    /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

  9. Ну, це лише груба перевірка, але не на 100% точна, наприклад, це буде нормально john_doe. @ gmail.com що насправді не є дійсною адресою електронної пошти (крапка не допускається як останній символ у локальній частині електронної пошти).
    Також він прийняв би john…doe@gmail.com що також є недійсним, оскільки в послідовності не може бути більше однієї крапки.

    Це лише деякі вади, які я помітив з першого погляду.
    Я не маю наміру просто вказувати на це, якщо хтось планує використовувати це як перевірку безпеки - недостатньо захищений.

    Для отримання інформації про дійсні адреси електронної пошти ознайомтесь із цим: http://en.wikipedia.org/wiki/E-mail_address

  10. Діпак,

    Насправді, я вважаю, що вам потрібно застосувати пробіл для крапки (".") Отже, ваша функція повинна бути замість цього:

    функція validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    повернути emailPattern.test (id);

    }

    В іншому випадку крапка означала б "будь-який символ". Я вважаю, що таких особливих персонажів потрібно уникати.

    З повагою,

    Федеріко

  11. функція validateEmail (fld) {
    помилка var = ””;
    var tfld = обрізати (fld.value); // значення поля з обрізаними пробілами
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var незаконнийChars = / [(),;: \ ”[]] /;

    if (fld.value == “Введіть свою електронну адресу”) {

    error = “Будь ласка, введіть свою адресу електронної пошти.n”;
    } else if (! emailFilter.test (tfld)) {// перевірити електронну пошту на наявність нелегальних символів

    error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
    } інакше якщо (fld.value.match (legalChars)) {

    error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
    }
    помилка повернення;
    }

  12. функція validateEmail (fld) {
    помилка var = ””;
    var tfld = обрізати (fld.value); // значення поля з обрізаними пробілами
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var незаконнийChars = / [(),;: \ ”[]] /;

    if (fld.value == “Введіть свою електронну адресу”) {

    error = “Будь ласка, введіть свою адресу електронної пошти.n”;
    } else if (! emailFilter.test (tfld)) {// перевірити електронну пошту на наявність нелегальних символів

    error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
    } інакше якщо (fld.value.match (legalChars)) {

    error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
    }
    помилка повернення;
    }

  13. функція validateEmail (fld) {
    помилка var = ””;
    var tfld = обрізати (fld.value); // значення поля з обрізаними пробілами
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var незаконнийChars = / [(),;: \ ”[]] /;

    if (fld.value == “Введіть свою електронну адресу”) {

    error = “Будь ласка, введіть свою адресу електронної пошти.n”;
    } else if (! emailFilter.test (tfld)) {// перевірити електронну пошту на наявність нелегальних символів

    error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
    } інакше якщо (fld.value.match (legalChars)) {

    error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
    }
    помилка повернення;
    }

  14. функція validateEmail (fld) {
    помилка var = ””;
    var tfld = обрізати (fld.value); // значення поля з обрізаними пробілами
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var незаконнийChars = / [(),;: \ ”[]] /;

    if (fld.value == “Введіть свою електронну адресу”) {

    error = “Будь ласка, введіть свою адресу електронної пошти.n”;
    } else if (! emailFilter.test (tfld)) {// перевірити електронну пошту на наявність нелегальних символів

    error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
    } інакше якщо (fld.value.match (legalChars)) {

    error = “Будь ласка, введіть дійсну адресу електронної пошти.n”;
    }
    помилка повернення;
    }

Що ви думаєте?

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.

Догори кнопки