Verificați adresa de e-mail cu JavaScript și expresii regulate

Acum ceva timp am pus un Verificarea puterii parolei folosind JavaScript și expresii regulate. În aceeași notă, puteți verifica, de asemenea, structura unei adrese de e-mail utilizând aceeași metodologie de expresie regulată (regex).

Dacă elementul dvs. de formular are id = ”adresă de e-mail” și adăugați un formular onSubmit = ”return checkEmail ();„, Aceasta este o funcție Javascript pe care o puteți utiliza pentru a returna o alertă dacă adresa de e-mail are o structură validă sau nu:

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

Funcția validează conținutul e-mailului cu cel al filtrului. Dacă comparația eșuează, apare o alertă și returnează focalizarea înapoi la câmpul de adresă de e-mail!

4 Comentarii

  1. 1

    Pentru formularele cu mai multe adrese de e-mail, ar fi bine să faceți class = „emailaddress”. Dacă aveți biblioteca prototype.js (http://www.prototypejs.org) inclus în pagină puteți face așa ceva:

    var valid = adevărat;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. adresa de e-mail'). fiecare (funcție (e-mail) {
    if (! filter.test (email.value)) {
    alertă (? Vă rugăm să furnizați o adresă de e-mail validă?);
    email.focus;
    valid = false;
    }
    });
    retur valabil;

  2. 5
  3. 7

    Îmi place ideea, dar aș ezita să adopt această expresie regulată, fără a descrie ce adrese de e-mail legale nu acceptă și ce adrese ilegale le permite.

    Pentru un exemplu de expresie regulată care face o treabă decentă, alături de o explicație a cazurilor pe care nu le acoperă, a se vedea acest lucru:

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

    Preferința mea personală este de a acoperi majoritatea cazurilor simple și de a emite un avertisment pentru orice altceva decât de a-l respinge. Dacă Bob vrea cu adevărat să se supună bob@com.museum mai degrabă decât bob@museum.com, de ce să nu-l las?

    • 8

      Salut Reg,

      Puteți testa Regex utilizând un Tester Regex online.

      De asemenea, există cu siguranță mult mai multe lucruri care pot fi făcute dacă doriți să vă asigurați un adresa de email este valabil în conformitate cu RFC.

      Există câteva motive pentru a nu permite unei persoane să introducă o adresă de e-mail nevalidă:
      1. Vor fi contrariați de dvs. atunci când e-mailul pe care îl așteptau nu va trece - indiferent dacă a fost sau nu vina, adresa a fost introdusă incorect.
      2. Dacă com.museum era un domeniu valid și, să zicem, Yahoo! a operat-o - orice adresă de e-mail care a respins ar avea un impact negativ asupra reputației companiei dvs. de livrare a e-mailului. Acest lucru ar putea duce la blocarea tuturor e-mailurilor companiei dvs.
      3. Dacă furnizorul de servicii de e-mail v-a permis să intrați bob@com.museum, veți plăti, de asemenea, pentru fiecare e-mail trimis la acea adresă de e-mail până când aceștia și-au dezabonat acea adresă din cauza salturilor. M-aș îndepărta de orice ESP care ar permite o astfel de adresă de e-mail nevalidă - doar îți iau banii!

      Vă mulțumim că ați oprit!
      Doug

  4. 9
  5. 10

    Există o modalitate mult mai simplă de a scrie expresia:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Cu modificatorul final / i nu este necesar să indicați intervalul de majuscule.
    - Nu știu niciunul TLD cu numere în ea.
    Pe o notă laterală, permit TLD cu până la 6 caractere; altele noi ajung în mod regulat și nu se știe niciodată (ei bine, unii viitori pot avea chiar și numere, știu)

  6. 11

    Salut,

    Vreau să folosesc acest lucru într-o formă existentă în timp real, dar acest lucru nu pare să fie validat în timp real, cum ar fi verificatorul tău de parolă ...

    Sau, sunt doar atât de lipsit de idei și nu funcționează pentru mine?

  7. 12

    btw, îmi place foarte mult ceea ce aveți aici, tutorialele dvs. sunt foarte simple, cu siguranță îl voi marca pe acesta ....

  8. 13
  9. 16
  10. 17

    Doar o mică corecție: expresia regulată are un extra () + la sfârșit. Ar trebui să citească:

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

    Cu primul, orice TLD-uri de lungime ar fi acceptate (ceea ce nu este greșit intrinsec, așa cum au subliniat alții, dar dacă aceasta ar fi intenția, expresia ar putea fi scurtată).

  11. 18

    Puteți explica expresia regulată a acestui cod și cum funcționează? Tot despre .test - Este .test o declarație implicită în javascript pentru a verifica lucruri precum ați făcut-o în codul de mai sus?

  12. 19

    Acesta este un cod scurt pentru expresia de e-mail-

    funcție validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    retur emailPattern.test (id);

    }
    Deepak Rai
    varanasi

  13. 20

    Acesta este un cod scurt pentru expresia de e-mail-

    funcție validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    retur emailPattern.test (id);

    }
    Deepak Rai
    varanasi

  14. 21
  15. 22
  16. 23

    Mulțumesc, dar există o eroare în această regex. Nu sunt expert în regex, dar am încercat prin e-mail:

    test test

    și a trecut de regex ... Am observat că lipsește să scape de „.” deci ar trebui să fie:

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

  17. 24
  18. 27

    Ei bine, aceasta este doar o verificare dură, dar nu 100% exactă, de exemplu, ar fi bine john_doe. @ gmail.com care de fapt nu este o adresă de e-mail validă (punctul nu este permis ca ultim caracter în partea locală a e-mail-ului).
    De asemenea, ar accepta john…doe@gmail.com care este, de asemenea, invalid, deoarece nu pot exista mai multe puncte într-o succesiune.

    Acestea sunt doar câteva defecte pe care le-am observat la prima vedere.
    Intenția mea nu este să mă bazez doar să subliniez acest lucru în cazul în care cineva intenționează să utilizeze acest lucru ca un control de securitate - nu suficient de sigur.

    Pentru informații despre adresele de e-mail valide, verificați acest lucru: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    De fapt, cred că trebuie să aplicați o evadare pentru punct („.”). Deci, funcția dvs. ar trebui să fie, în schimb:

    funcție validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    retur emailPattern.test (id);

    }

    În caz contrar, punctul ar însemna „orice caracter”. Cred că astfel de personaje speciale trebuie evitate.

    Salutari,

    Federico

  20. 29

    funcție validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valoarea câmpului cu spațiul alb tăiat
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == „Introduceți adresa de e-mail”) {

    error = „Vă rugăm să introduceți adresa de e-mail.n”;
    } else if (! emailFilter.test (tfld)) {// testați e-mailul pentru caracterele ilegale

    error = „Vă rugăm să introduceți o adresă de e-mail validă.n”;
    } else if (fld.value.match (illegalChars)) {

    error = „Vă rugăm să introduceți o adresă de e-mail validă.n”;
    }
    eroare de returnare;
    }

  21. 30

    funcție validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valoarea câmpului cu spațiul alb tăiat
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == „Introduceți adresa de e-mail”) {

    error = „Vă rugăm să introduceți adresa de e-mail.n”;
    } else if (! emailFilter.test (tfld)) {// testați e-mailul pentru caracterele ilegale

    error = „Vă rugăm să introduceți o adresă de e-mail validă.n”;
    } else if (fld.value.match (illegalChars)) {

    error = „Vă rugăm să introduceți o adresă de e-mail validă.n”;
    }
    eroare de returnare;
    }

  22. 31

    funcție validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valoarea câmpului cu spațiul alb tăiat
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == „Introduceți adresa de e-mail”) {

    error = „Vă rugăm să introduceți adresa de e-mail.n”;
    } else if (! emailFilter.test (tfld)) {// testați e-mailul pentru caracterele ilegale

    error = „Vă rugăm să introduceți o adresă de e-mail validă.n”;
    } else if (fld.value.match (illegalChars)) {

    error = „Vă rugăm să introduceți o adresă de e-mail validă.n”;
    }
    eroare de returnare;
    }

  23. 32

    funcție validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valoarea câmpului cu spațiul alb tăiat
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == „Introduceți adresa de e-mail”) {

    error = „Vă rugăm să introduceți adresa de e-mail.n”;
    } else if (! emailFilter.test (tfld)) {// testați e-mailul pentru caracterele ilegale

    error = „Vă rugăm să introduceți o adresă de e-mail validă.n”;
    } else if (fld.value.match (illegalChars)) {

    error = „Vă rugăm să introduceți o adresă de e-mail validă.n”;
    }
    eroare de returnare;
    }

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

Ce părere ai?

Acest site folosește Akismet pentru a reduce spamul. Aflați cum sunt procesate datele despre comentarii.