Sjekk e-postadressen med JavaScript og regulære uttrykk

For en stund siden la jeg opp en Passordstyrkekontroll ved hjelp av JavaScript og regulære uttrykk. På samme notat kan du også sjekke strukturen til en e-postadresse ved å bruke samme regulære uttrykk (regex) -metodikk.

Hvis skjemaelementet ditt har id = ”e-postadresse” og du legger til et skjema onSubmit = ”return checkEmail ();“, Dette er en Javascript-funksjon som du kan bruke til å returnere et varsel hvis e-postadressen har en gyldig struktur eller ikke:

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

Funksjonen validerer innholdet i e-posten til filterets. Hvis sammenligningen mislykkes, dukker det opp et varsel og returnerer fokuset tilbake til e-postadressefeltet!

41 Kommentarer

  1. 1

    For skjemaer med flere e-postadresser vil det være greit å gjøre class="emailaddress". Hvis du har prototype.js-biblioteket (http://www.prototypejs.org) inkludert på siden kan du gjøre noe slikt:

    var gyldig = sant;
    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(?Vennligst oppgi en gyldig e-postadresse?);
    email.focus;
    gyldig = usann;
    }
    });
    retur gyldig;

  2. 5
  3. 7

    Jeg liker ideen, men jeg ville vært nølende med å ta i bruk dette regulære uttrykket uten beskrivelse av hvilke lovlige e-postadresser det ikke godtar og hvilke ulovlige adresser det tillater.

    For et eksempel på et regulært uttrykk som gjør en anstendig jobb sammen med en forklaring på hvilke tilfeller det ikke dekker, se dette:

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

    Min personlige preferanse er å dekke de fleste enkle tilfellene og gi en advarsel for alt annet i stedet for å avvise det. Hvis Bob virkelig ønsker å sende inn bob@com.museum snarere enn bob@museum.com, hvorfor ikke la ham?

    • 8

      Hei Reg,

      Du kan teste ut Regex ved å bruke en Online Regex-tester.

      Dessuten er det definitivt mye mer som kan gjøres hvis du vil sikre en e-postadresse er gyldig i henhold til RFC.

      Det er noen grunner til å ikke la noen angi en ugyldig e-postadresse:
      1. De vil bli irritert på deg når e-posten de forventet ikke kommer igjennom – uansett om det var din feil at adressen ble skrevet inn feil eller ikke.
      2. Hvis com.museum var et gyldig domene, og la oss si Yahoo! drev det – enhver e-postadresse som returnerte ville ha en negativ innvirkning på bedriftens rykte for e-postlevering. Dette kan føre til at all bedriftens e-post blir blokkert.
      3. Hvis e-postleverandøren din tillot deg å gå inn bob@com.museum, betaler du også for hver e-post som sendes til den e-postadressen til de avslutter abonnementet på den adressen på grunn av avvisninger. Jeg ville unngå enhver ESP som ville tillate en slik ugyldig e-postadresse – de tar bare pengene dine!

      Takk for at du stoppet ved!
      Doug

  4. 9
  5. 10

    Det er mye enklere måte å skrive uttrykket på:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    – Med den siste modifikatoren /i er det ikke nødvendig å angi store bokstaver.
    – Jeg vet ikke om noen TLD med tall i.
    På en sidenotat, jeg tillater TLD med opptil 6 tegn; nye kommer regelmessig, og du vet aldri (vel, noen fremtidige kan til og med ha tall i seg, jeg vet).

  6. 11

    Hei der,

    Jeg prøver å bruke dette i en eksisterende form i sanntid, men dette ser ikke ut til å validere i sanntid som passordstyrkekontrollen din ...

    Eller er jeg bare så uvitende, og det fungerer ikke for meg?

  7. 12

    btw, jeg liker virkelig det du har på gang her, opplæringen din er veldig enkel, jeg vil definitivt bokmerke denne ....

  8. 13
  9. 16
  10. 17

    Bare en liten korreksjon: Det regulære uttrykket har en ekstra ()+ på slutten. Det skal stå:

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

    Med den første ville TLD-er av hvilken som helst lengde bli akseptert (noe som ikke er iboende feil som andre har påpekt, men hvis det var intensjonen kunne uttrykket forkortes).

  11. 18

    Kan du forklare det vanlige uttrykket til denne koden og hvordan den fungerer? Også om .test – Er .test en standardsetning i javascript for å sjekke ting som du gjorde i koden ovenfor?

  12. 19

    Dette er en kort kode for e-postuttrykk-

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

    }
    Deepak Rai
    varanasi

  13. 20

    Dette er en kort kode for e-postuttrykk-

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

    }
    Deepak Rai
    varanasi

  14. 21
  15. 22
  16. 23

    Takk, men det er en feil i dette regulære uttrykket. Jeg er ikke en regex-ekspert, men jeg prøvde e-post:

    test@test

    og det passerte regex... Jeg la merke til at det mangler å unnslippe "." så det burde være:

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

  17. 24
  18. 27

    Vel, dette er bare en grov sjekk, men ikke 100% nøyaktig, for eksempel ville dette være greit john_doe.@gmail.com som faktisk ikke er en gyldig e-postadresse (prikk er ikke tillatt som siste tegn i lokal del av e-post).
    Det ville også godta john…doe@gmail.com som også er ugyldig siden det ikke kan være mer enn én prikk i en sekvens.

    Dette er bare noen feil jeg la merke til ved første blikk.
    Min intensjon er ikke bare å påpeke dette i tilfelle noen planlegger å bruke dette som en sikkerhetssjekk – ikke sikkert nok.

    For informasjon om gyldige e-postadresser, sjekk ut dette: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    Egentlig tror jeg du må bruke en escape for prikken (“.”). Så funksjonen din bør være i stedet:

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

    }

    Ellers vil prikken bety "hvilket som helst tegn". Jeg tror at slike spesialkarakterer må unnslippes.

    hilsen,

    Federico

  20. 29

    function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.verdi); // verdien av feltet med mellomrom trimmet av
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Skriv inn e-postadressen din") {

    error = "Vennligst skriv inn e-postadressen din.n";
    } else if (!emailFilter.test(tfld)) { //test e-post for ulovlige tegn

    error = "Vennligst skriv inn en gyldig e-postadresse.n";
    } else if (fld.value.match(illegalChars)) {

    error = "Vennligst skriv inn en gyldig e-postadresse.n";
    }
    retur feil;
    }

  21. 30

    function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.verdi); // verdien av feltet med mellomrom trimmet av
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Skriv inn e-postadressen din") {

    error = "Vennligst skriv inn e-postadressen din.n";
    } else if (!emailFilter.test(tfld)) { //test e-post for ulovlige tegn

    error = "Vennligst skriv inn en gyldig e-postadresse.n";
    } else if (fld.value.match(illegalChars)) {

    error = "Vennligst skriv inn en gyldig e-postadresse.n";
    }
    retur feil;
    }

  22. 31

    function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.verdi); // verdien av feltet med mellomrom trimmet av
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Skriv inn e-postadressen din") {

    error = "Vennligst skriv inn e-postadressen din.n";
    } else if (!emailFilter.test(tfld)) { //test e-post for ulovlige tegn

    error = "Vennligst skriv inn en gyldig e-postadresse.n";
    } else if (fld.value.match(illegalChars)) {

    error = "Vennligst skriv inn en gyldig e-postadresse.n";
    }
    retur feil;
    }

  23. 32

    function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.verdi); // verdien av feltet med mellomrom trimmet av
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Skriv inn e-postadressen din") {

    error = "Vennligst skriv inn e-postadressen din.n";
    } else if (!emailFilter.test(tfld)) { //test e-post for ulovlige tegn

    error = "Vennligst skriv inn en gyldig e-postadresse.n";
    } else if (fld.value.match(illegalChars)) {

    error = "Vennligst skriv inn en gyldig e-postadresse.n";
    }
    retur feil;
    }

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

Hva tror du?

Dette nettstedet bruker Akismet for å redusere spam. Lær hvordan kommentaren din behandles.