Проверете имейл адреса с JavaScript и регулярни изрази

Преди малко сложих a Проверка на силата на паролата с помощта на 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 валидно = вярно;
    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

      Здравей,

      Можете да тествате Regex с помощта на Онлайн тестер за регулярни изрази.

      Освен това определено има много повече неща, които можете да направите, ако искате да си осигурите имейл адрес е валиден в съответствие с RFC.

      Има няколко причини да не позволите на някого да въведе невалиден имейл адрес:
      1. Те ​​ще ви се дразнят, когато имейлът, който са очаквали, не мине - независимо дали по ваша вина адресът е въведен неправилно или не.
      2. Ако com.museum е бил валиден домейн и, да речем, Yahoo! управлявал го - всеки имейл адрес, който отскочи, би имал отрицателно въздействие върху репутацията на вашата компания за доставка на имейл. Това може да доведе до блокиране на целия имейл на вашата компания.
      3. Ако вашият доставчик на имейл услуги ви е разрешил да влезете bob@com.museum, вие също бихте платили за всеки имейл, изпратен на този имейл адрес, докато те не се отпишат от този адрес поради отскоци. Бих се държал далеч от всеки ESP, който би позволил невалиден имейл адрес като този - те просто ти вземат парите!

      Благодарим ви, че сте спрели!
      Дъг

  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

    btw, много ми харесва това, което се случва тук, вашите уроци са много прости, определено ще маркирам този ...

  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

    Това е кратък код за израз на имейл-

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

    }
    Дийпак Рай
    Варанаси

  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

    Благодаря, но в този регулярен израз има грешка. Не съм експерт по регулярни изрази, но опитах имейл:

    тест @ тест

    и премина покрай регулярния израз ... Забелязах, че липсва избягването на "." така трябва да бъде:

    /^([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 tfld = подрязване (fld.value); // стойност на полето с отрязано празно пространство
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var незаконниChars = / [(),;: \ ”[]] /;

    if (fld.value == “Въведете вашия имейл адрес”) {

    грешка = “Моля, въведете вашия имейл адрес.n”;
    } else if (! emailFilter.test (tfld)) {// тестване на имейл за незаконни символи

    грешка = "Моля, въведете валиден имейл адрес.n";
    } иначе ако (fld.value.match (legalChars)) {

    грешка = "Моля, въведете валиден имейл адрес.n";
    }
    грешка при връщане;
    }

  21. 30

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

    if (fld.value == “Въведете вашия имейл адрес”) {

    грешка = “Моля, въведете вашия имейл адрес.n”;
    } else if (! emailFilter.test (tfld)) {// тестване на имейл за незаконни символи

    грешка = "Моля, въведете валиден имейл адрес.n";
    } иначе ако (fld.value.match (legalChars)) {

    грешка = "Моля, въведете валиден имейл адрес.n";
    }
    грешка при връщане;
    }

  22. 31

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

    if (fld.value == “Въведете вашия имейл адрес”) {

    грешка = “Моля, въведете вашия имейл адрес.n”;
    } else if (! emailFilter.test (tfld)) {// тестване на имейл за незаконни символи

    грешка = "Моля, въведете валиден имейл адрес.n";
    } иначе ако (fld.value.match (legalChars)) {

    грешка = "Моля, въведете валиден имейл адрес.n";
    }
    грешка при връщане;
    }

  23. 32

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

    if (fld.value == “Въведете вашия имейл адрес”) {

    грешка = “Моля, въведете вашия имейл адрес.n”;
    } else if (! emailFilter.test (tfld)) {// тестване на имейл за незаконни символи

    грешка = "Моля, въведете валиден имейл адрес.n";
    } иначе ако (fld.value.match (legalChars)) {

    грешка = "Моля, въведете валиден имейл адрес.n";
    }
    грешка при връщане;
    }

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

Какво мислите?

Този сайт използва Akismet за намаляване на спама. Научете как се обработват данните за коментарите ви.