Controleer het e-mailadres met JavaScript en reguliere expressies

Een tijdje geleden heb ik een Wachtwoordsterkte-checker met JavaScript en reguliere expressies. Op dezelfde opmerking kunt u ook de structuur van een e-mailadres controleren met behulp van dezelfde reguliere expressie (regex) -methode.

Als uw formulierelement de id = "emailadres" en je voegt een formulier toe onSubmit = ”return checkEmail ();“, Dit is een Javascript-functie die u kunt gebruiken om een ​​waarschuwing te retourneren als het e-mailadres een geldige structuur heeft of niet:

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

De functie valideert de inhoud van de e-mail naar die van het filter. Als de vergelijking mislukt, verschijnt er een waarschuwing en wordt de focus teruggezet naar het e-mailadresveld!

41 reacties

  1. 1

    Voor formulieren met meerdere e-mailadressen, zou het goed zijn om class = ”emailadres” te doen. Als u de bibliotheek prototype.js (http://www.prototypejs.org) op de pagina staat, kunt u zoiets als dit doen:

    var geldig = waar;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. emailadres'). elk (functie (e-mail) {
    if (! filter.test (email.value)) {
    alert (? Geef een geldig e-mailadres op?);
    e-mail.focus;
    geldig = onwaar;
    }
    });
    retour geldig;

  2. 5
  3. 7

    Ik vind het een leuk idee, maar ik zou aarzelen om deze specifieke reguliere expressie over te nemen zonder te beschrijven welke legale e-mailadressen het niet accepteert en welke illegale adressen het toestaat.

    Zie dit voor een voorbeeld van een reguliere expressie die goed werk levert, naast een uitleg van welke gevallen het niet dekt:

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

    Mijn persoonlijke voorkeur is om de meeste eenvoudige gevallen te behandelen en voor al het andere een waarschuwing te geven in plaats van het af te wijzen. Als Bob zich echt wil onderwerpen bob@com.museum dan bob@museum.com, waarom laat je hem niet?

    • 8

      Hoi Reg,

      U kunt de Regex testen met een Online Regex-tester.

      Er is ook zeker nog veel meer dat u kunt doen als u een e-mailadres is geldig in overeenstemming met de RFC.

      Er zijn een paar redenen waarom iemand geen ongeldig e-mailadres mag invoeren:
      1. Ze zullen geïrriteerd raken als de e-mail die ze verwachtten niet doorkomt - ongeacht of het jouw schuld was of het adres verkeerd was ingevoerd.
      2. Als com.museum een ​​geldig domein was en, laten we zeggen, Yahoo! gebruikt - elk e-mailadres dat wordt teruggestuurd, zou een negatieve invloed hebben op de reputatie van uw bedrijf op het gebied van e-mailbezorging. Dit kan ertoe leiden dat alle e-mail van uw bedrijf wordt geblokkeerd.
      3. Als uw e-mailserviceprovider u toestemming heeft gegeven bob@com.museum, zou u ook betalen voor elke e-mail die naar dat e-mailadres wordt verzonden totdat ze zich op dat adres hebben afgemeld vanwege bounces. Ik zou elke ESP vermijden die een dergelijk ongeldig e-mailadres zou toestaan ​​- ze nemen gewoon je geld aan!

      Bedankt voor het langskomen!
      Doug

  4. 9
  5. 10

    Er is een veel eenvoudigere manier om de uitdrukking te schrijven:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Met de laatste modifier / i is het niet nodig om het bereik in hoofdletters aan te geven.
    - Ik ken er geen TLD met cijfers erin.
    Even terzijde, ik sta TLD toe met maximaal 6 tekens; er komen regelmatig nieuwe binnen en je weet maar nooit (nou ja, toekomstige zullen misschien zelfs cijfers bevatten, ik weet het).

  6. 11

    Hey daar!

    Ik probeer dit in een bestaand formulier in realtime te gebruiken, maar dit lijkt niet in realtime te valideren, zoals je wachtwoordsterkte-checker ...

    Of ben ik gewoon zo dom, en werkt het niet voor mij?

  7. 12
  8. 13
  9. 16
  10. 17

    Een kleine correctie: de reguliere expressie heeft aan het einde een extra () +. Het zou moeten lezen:

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

    Met de eerste zouden TLD's van elke lengte worden geaccepteerd (wat niet intrinsiek verkeerd is zoals anderen hebben opgemerkt, maar als dat de bedoeling was, zou de uitdrukking kunnen worden ingekort).

  11. 18

    Kunt u de reguliere expressie van deze code uitleggen en hoe deze werkt? Ook over .test - Is .test een standaard statement in javascript om dingen te controleren zoals je deed in de bovenstaande code?

  12. 19
  13. 20

    Dit is een korte code voor e-mailuitdrukking

    functie validateEmail (id)
    {
    var emailPattern = /^^^^^^^^^^^ “
    retourneer emailPattern.test (id);

    }
    Deepak Rai
    varanasi

  14. 21
  15. 22
  16. 23

    Bedankt, maar er zit een fout in deze regex. Ik ben geen regex-expert, maar ik heb e-mail geprobeerd:

    test @ test

    en het passeerde de regex ... Ik merkte dat het ontbreekt aan de "." dus het zou moeten zijn:

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

  17. 24
  18. 27

    Dit is slechts een grove controle, maar niet 100% nauwkeurig, dit zou bijvoorbeeld oké zijn john_doe. @ gmail.com wat eigenlijk geen geldig e-mailadres is (punt is niet toegestaan ​​als laatste teken in het lokale deel van e-mail).
    Het zou ook accepteren john...doe@gmail.com wat ook ongeldig is omdat er niet meer dan één punt in een reeks kan zijn.

    Dit zijn slechts enkele tekortkomingen die ik op het eerste gezicht opmerkte.
    Mijn bedoeling is niet te bashen om dit aan te duiden voor het geval iemand van plan is dit als veiligheidscontrole te gebruiken - niet veilig genoeg.

    Kijk hier voor info over geldige e-mailadressen: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    Eigenlijk denk ik dat je een escape moet toepassen voor de punt ("."). Dus je functie zou in plaats daarvan moeten zijn:

    functie validateEmail (id)
    {
    var emailPattern = /^^^^^^^^^^^ “
    retourneer emailPattern.test (id);

    }

    Anders zou de punt "elk teken" betekenen. Ik geloof dat zulke speciale karakters moeten worden ontsnapt.

    Met vriendelijke groet,

    Federico

  20. 29

    functie validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // waarde van veld met witruimte weggesneden
    var emailFilter = /^[^@[+@[^@.media.+.[^@[*ww$/;
    var illegaleChars = / [(),;: \ "[]] /;

    if (fld.value == "Voer uw e-mailadres in") {

    error = "Voer uw e-mailadres in. n";
    } else if (! emailFilter.test (tfld)) {// test e-mail op ongeldige tekens

    error = "Voer een geldig e-mailadres in. n";
    } else if (fld.value.match (illegaleChars)) {

    error = "Voer een geldig e-mailadres in. n";
    }
    terugkeer fout;
    }

  21. 30

    functie validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // waarde van veld met witruimte weggesneden
    var emailFilter = /^[^@[+@[^@.media.+.[^@[*ww$/;
    var illegaleChars = / [(),;: \ "[]] /;

    if (fld.value == "Voer uw e-mailadres in") {

    error = "Voer uw e-mailadres in. n";
    } else if (! emailFilter.test (tfld)) {// test e-mail op ongeldige tekens

    error = "Voer een geldig e-mailadres in. n";
    } else if (fld.value.match (illegaleChars)) {

    error = "Voer een geldig e-mailadres in. n";
    }
    terugkeer fout;
    }

  22. 31

    functie validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // waarde van veld met witruimte weggesneden
    var emailFilter = /^[^@[+@[^@.media.+.[^@[*ww$/;
    var illegaleChars = / [(),;: \ "[]] /;

    if (fld.value == "Voer uw e-mailadres in") {

    error = "Voer uw e-mailadres in. n";
    } else if (! emailFilter.test (tfld)) {// test e-mail op ongeldige tekens

    error = "Voer een geldig e-mailadres in. n";
    } else if (fld.value.match (illegaleChars)) {

    error = "Voer een geldig e-mailadres in. n";
    }
    terugkeer fout;
    }

  23. 32

    functie validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // waarde van veld met witruimte weggesneden
    var emailFilter = /^[^@[+@[^@.media.+.[^@[*ww$/;
    var illegaleChars = / [(),;: \ "[]] /;

    if (fld.value == "Voer uw e-mailadres in") {

    error = "Voer uw e-mailadres in. n";
    } else if (! emailFilter.test (tfld)) {// test e-mail op ongeldige tekens

    error = "Voer een geldig e-mailadres in. n";
    } else if (fld.value.match (illegaleChars)) {

    error = "Voer een geldig e-mailadres in. n";
    }
    terugkeer fout;
    }

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

Wat denk je?

Deze site gebruikt Akismet om spam te verminderen. Ontdek hoe uw reactiegegevens worden verwerkt.