Перевірте електронну адресу за допомогою JavaScript та регулярних виразів

Деякий час тому я виставив Перевірка надійності пароля за допомогою JavaScript та регулярних виразів. У цій самій примітці ви також можете перевірити структуру адреси електронної пошти, використовуючи ту саму методологію регулярних виразів (регулярних виразів).

Якщо ваш елемент форми має id = ”адреса електронної пошти” і ви додаєте форму onSubmit = ”return checkEmail ();“, Це функція Javascript, яку ви можете використовувати для повернення попередження, якщо адреса електронної пошти має дійсну структуру чи ні:

function checkEmail() {
var email = document.getElementById('emailaddress');
var filter = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (!filter.test(email.value)) {
alert('Please provide a valid email address');
email.focus;
return false;
}
}

Функція перевіряє вміст електронного листа відповідно до вмісту фільтра. Якщо порівняння не вдається, воно видає попередження і повертає фокус назад у поле адреси електронної пошти!

41 Коментарі

  1. 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. 5
  3. 7

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

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

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

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

    • 8

      Привіт Рег,

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

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

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

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

  4. 9
  5. 10

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

  6. 11

    Привіт там,

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

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

  7. 12

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

  8. 13
  9. 16
  10. 17

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

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

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

  11. 18

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

  12. 19
  13. 20

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

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

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

  14. 21
  15. 22
  16. 23

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

    test @ test

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

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

  17. 24
  18. 27

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

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

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

  19. 28

    Діпак,

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

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

    }

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

    З повагою,

    Федеріко

  20. 29

    функція 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”;
    }
    помилка повернення;
    }

  21. 30

    функція 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”;
    }
    помилка повернення;
    }

  22. 31

    функція 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”;
    }
    помилка повернення;
    }

  23. 32

    функція 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”;
    }
    помилка повернення;
    }

  24. 33
  25. 34
  26. 35
  27. 36
  28. 37
  29. 38
  30. 39
  31. 40

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

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