Sprawdź adres e-mail za pomocą JavaScript i wyrażeń regularnych

Jakiś czas temu postawiłem Narzędzie do sprawdzania siły haseł za pomocą JavaScript i wyrażeń regularnych. W tej samej notatce możesz również sprawdzić strukturę adresu e-mail, korzystając z tej samej metodologii wyrażeń regularnych (regex).

Jeśli twój element formularza ma rozszerzenie id = ”emailaddress” i dodajesz formularz onSubmit = ”return checkEmail ();„, To jest funkcja JavaScript, której można użyć do zwrócenia alertu, jeśli adres e-mail ma prawidłową strukturę lub nie:

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;
}
}

Funkcja sprawdza zawartość wiadomości e-mail na podstawie filtru. Jeśli porównanie się nie powiedzie, pojawia się alert i zwraca fokus z powrotem do pola adresu e-mail!

Komentarze 41

  1. 1

    W przypadku formularzy z wieloma adresami e-mail dobrze byłoby zrobić class = ”emailaddress”. Jeśli masz bibliotekę prototype.js (http://www.prototypejs.org) zawarte na stronie możesz zrobić coś takiego:

    var ważny = prawda;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ („. emailaddress”). each (function (email) {
    if (! filter.test (email.value)) {
    alert (? Proszę podać poprawny adres e-mail?);
    e-mail.focus;
    ważny = fałsz;
    }
    });
    zwrot ważny;

  2. 5
  3. 7

    Pomysł mi się podoba, ale wahałbym się przed przyjęciem tego konkretnego wyrażenia regularnego bez opisu, których legalnych adresów e-mail nie akceptuje, a które niedozwolone.

    Aby zapoznać się z przykładem wyrażenia regularnego, które wykonuje dobrą robotę, wraz z wyjaśnieniem, których przypadków nie obejmuje, zobacz:

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

    Osobiście wolę omówić większość prostych przypadków i ostrzec o wszystkim innym, zamiast je odrzucać. Jeśli Bob naprawdę chce się poddać bob@com.muzeum zamiast bob@museum.comdlaczego nie pozwolisz mu?

    • 8

      Cześć Reg,

      Możesz przetestować Regex przy użyciu Tester wyrażeń regularnych online.

      Ponadto zdecydowanie więcej można zrobić, jeśli chcesz zapewnić adres e-mail jest ważny zgodnie z RFC.

      Istnieje kilka powodów, dla których nie można pozwolić komuś na wprowadzenie nieprawidłowego adresu e-mail:
      1. Denerwują się, gdy e-mail, którego oczekiwali, nie dotrze - niezależnie od tego, czy to była Twoja wina, czy adres został wpisany nieprawidłowo.
      2. Jeśli com.museum było prawidłową domeną i, powiedzmy, Yahoo! obsługiwał to - każdy odesłany adres e-mail miałby negatywny wpływ na reputację Twojej firmy w zakresie dostarczania wiadomości e-mail. Może to spowodować zablokowanie wszystkich firmowych wiadomości e-mail.
      3. Jeśli Twój dostawca usług poczty elektronicznej pozwolił Ci wejść bob@com.muzeum, zapłacisz również za każdą wiadomość e-mail wysłaną na ten adres e-mail do momentu anulowania subskrypcji tego adresu z powodu odrzucenia. Unikałbym żadnego ESP, który pozwoliłby na taki nieprawidłowy adres e-mail - po prostu zabierają twoje pieniądze!

      Dzięki, że wpadłeś!
      Doug

  4. 9
  5. 10

    Jest znacznie prostszy sposób zapisania wyrażenia:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - W przypadku końcowego modyfikatora / i nie ma potrzeby podawania zakresu wielkich liter.
    - Nie znam żadnego TLD z liczbami.
    Na marginesie, zezwalam na TLD z maksymalnie 6 znakami; nowe przychodzą regularnie i nigdy nie wiadomo (no cóż, niektóre przyszłe mogą mieć nawet numery, wiem).

  6. 11

    Witam,

    Próbuję użyć tego w istniejącej formie w czasie rzeczywistym, ale wydaje się, że nie sprawdza się to w czasie rzeczywistym, tak jak sprawdzanie siły hasła…

    A może po prostu nie mam pojęcia i to nie działa dla mnie?

  7. 12

    btw, naprawdę podoba mi się to, co tu robisz, twoje tutoriale są bardzo proste, na pewno będę dodawał zakładki do tego….

  8. 13
  9. 16
  10. 17

    Tylko mała poprawka: wyrażenie regularne ma na końcu dodatkowy () +. Powinien brzmieć:

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

    W przypadku pierwszej domeny TLD o dowolnej długości byłyby akceptowane (co nie jest wewnętrznie błędne, jak wskazywali inni, ale gdyby taka była intencja, wyrażenie można by skrócić).

  11. 18

    Czy możesz wyjaśnić wyrażenia regularne tego kodu i jak działa? Również o .test - czy .test jest domyślną instrukcją w javascript do sprawdzania rzeczy takich jak w powyższym kodzie?

  12. 19

    To jest krótki kod do wyrażenia e-mail -

    function validateEmail (id)
    {
    var wzorzec e-mail = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    return emailPattern.test (id);

    }
    Deepak Rai
    Varanasi

  13. 20

    To jest krótki kod do wyrażenia e-mail -

    function validateEmail (id)
    {
    var wzorzec e-mail = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    return emailPattern.test (id);

    }
    Deepak Rai
    Varanasi

  14. 21
  15. 22
  16. 23

    Dzięki, ale w tym wyrażeniu regularnym jest błąd. Nie jestem ekspertem od regexów, ale próbowałem wysłać e-mail:

    test @ test

    i przeszedł przez wyrażenie regularne… Zauważyłem, że brakuje mu ucieczki przed „”. więc powinno być:

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

  17. 24
  18. 27

    Cóż, to tylko zgrubne sprawdzenie, ale nie w 100% dokładne, na przykład byłoby to w porządku john_doe. @ gmail.com który w rzeczywistości nie jest prawidłowym adresem e-mail (kropka nie jest dozwolona jako ostatni znak w lokalnej części wiadomości e-mail).
    To też by się zgodziło jan…doe@gmail.com co jest również nieważne, ponieważ w sekwencji nie może być więcej niż jedna kropka.

    To tylko niektóre wady, które zauważyłem na pierwszy rzut oka.
    Nie mam zamiaru walić tylko po to, by zwrócić na to uwagę na wypadek, gdyby ktoś planował to wykorzystać jako kontrolę bezpieczeństwa - nie jest wystarczająco bezpieczna.

    Aby uzyskać informacje o prawidłowych adresach e-mail, sprawdź to: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepaka,

    Właściwie myślę, że musisz zastosować ucieczkę dla kropki („.”). Zatem twoja funkcja powinna wyglądać tak:

    function validateEmail (id)
    {
    var wzorzec e-mail = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    return emailPattern.test (id);

    }

    W przeciwnym razie kropka oznaczałaby „dowolny znak”. Uważam, że przed takimi znakami specjalnymi trzeba uciec.

    Pozdrowienia,

    Federico

  20. 29

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // wartość pola z obciętymi białymi znakami
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var invalidChars = / [(),;: \ ”[]] /;

    if (fld.value == „Wprowadź swój adres e-mail”) {

    error = „Proszę podać swój adres e-mail.n”;
    } else if (! emailFilter.test (tfld)) {// testuje e-mail pod kątem niedozwolonych znaków

    error = „Wprowadź poprawny adres e-mail.n”;
    } else if (fld.value.match (niedozwoloneChars)) {

    error = „Wprowadź poprawny adres e-mail.n”;
    }
    błąd powrotu;
    }

  21. 30

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // wartość pola z obciętymi białymi znakami
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var invalidChars = / [(),;: \ ”[]] /;

    if (fld.value == „Wprowadź swój adres e-mail”) {

    error = „Proszę podać swój adres e-mail.n”;
    } else if (! emailFilter.test (tfld)) {// testuje e-mail pod kątem niedozwolonych znaków

    error = „Wprowadź poprawny adres e-mail.n”;
    } else if (fld.value.match (niedozwoloneChars)) {

    error = „Wprowadź poprawny adres e-mail.n”;
    }
    błąd powrotu;
    }

  22. 31

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // wartość pola z obciętymi białymi znakami
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var invalidChars = / [(),;: \ ”[]] /;

    if (fld.value == „Wprowadź swój adres e-mail”) {

    error = „Proszę podać swój adres e-mail.n”;
    } else if (! emailFilter.test (tfld)) {// testuje e-mail pod kątem niedozwolonych znaków

    error = „Wprowadź poprawny adres e-mail.n”;
    } else if (fld.value.match (niedozwoloneChars)) {

    error = „Wprowadź poprawny adres e-mail.n”;
    }
    błąd powrotu;
    }

  23. 32

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // wartość pola z obciętymi białymi znakami
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var invalidChars = / [(),;: \ ”[]] /;

    if (fld.value == „Wprowadź swój adres e-mail”) {

    error = „Proszę podać swój adres e-mail.n”;
    } else if (! emailFilter.test (tfld)) {// testuje e-mail pod kątem niedozwolonych znaków

    error = „Wprowadź poprawny adres e-mail.n”;
    } else if (fld.value.match (niedozwoloneChars)) {

    error = „Wprowadź poprawny adres e-mail.n”;
    }
    błąd powrotu;
    }

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

Co o tym myślisz?

Ta strona używa Akismet do redukcji spamu. Dowiedz się, jak przetwarzane są dane komentarza.