Zkontrolujte e-mailovou adresu pomocí JavaScriptu a regulárních výrazů

Před chvílí jsem dal a Kontrola síly hesla pomocí JavaScriptu a regulárních výrazů. Ve stejné poznámce můžete také zkontrolovat strukturu e-mailové adresy pomocí stejné metodiky regulárního výrazu (regex).

Pokud váš formulářový prvek má id = ”emailaddress” a přidáte formulář onSubmit = ”návrat checkEmail ();„, Toto je funkce Javascript, kterou můžete použít k vrácení upozornění, pokud má e-mailová adresa platnou strukturu nebo ne:

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

Funkce ověří obsah e-mailu na obsah filtru. Pokud se porovnání nezdaří, objeví se upozornění a vrátí fokus zpět do pole e-mailové adresy!

41 Komentáře

  1. 1

    U formulářů s více e-mailovými adresami by bylo dobré udělat class = ”emailaddress”. Pokud máte knihovnu prototype.js (http://www.prototypejs.org) na stránce můžete udělat něco takového:

    var valid = true;
    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)) {
    upozornění (? Uveďte platnou e-mailovou adresu?);
    email.focus;
    valid = false;
    }
    });
    návrat platný;

  2. 5
  3. 7

    Tato myšlenka se mi líbí, ale váhal bych s přijetím tohoto konkrétního regulárního výrazu bez popisu, které legální e-mailové adresy nepřijímá a které nelegální adresy povoluje.

    Příklad regulárního výrazu, který dělá slušnou práci, spolu s vysvětlením, které případy nezahrnuje, naleznete v tomto:

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

    Moje osobní preference je pokrýt většinu jednoduchých případů a vydat varování před všemi ostatními, místo toho, abych to odmítl. Pokud Bob opravdu chce, podej se bob@com.museum spíše než bob@museum.com, proč ho nenechat?

    • 8

      Ahoj Reg,

      Regex můžete vyzkoušet pomocí Online tester regexu.

      Určitě je toho možné udělat mnohem více, pokud si chcete zajistit emailová adresa je platný v souladu s RFC.

      Existuje několik důvodů, proč někomu nedovolit zadat neplatnou e-mailovou adresu:
      1. Budou na vás naštvaní, když e-mail, který očekávali, nedostane - bez ohledu na to, zda to byla vaše chyba, byla adresa zadána nesprávně.
      2. Pokud byla com.museum platnou doménou a řekněme Yahoo! provozoval - jakákoli e-mailová adresa, která se odrazila, by měla negativní dopad na reputaci vaší společnosti pro doručování e-mailů. To by mohlo vést k zablokování všech e-mailů vaší společnosti.
      3. Pokud vám to poskytovatel e-mailových služeb umožnil bob@com.museum, zaplatili byste také za každý e-mail odeslaný na tuto e-mailovou adresu, dokud tuto adresu neodhlásí z důvodu okamžitých opuštění. Vyhnul bych se jakémukoli ESP, který by umožňoval takovou neplatnou e-mailovou adresu - prostě berou vaše peníze!

      Děkujeme za zastavení!
      Doug

  4. 9
  5. 10

    Existuje mnohem jednodušší způsob, jak napsat výraz:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - U finálního modifikátoru / i není třeba označovat rozsah velkých písmen.
    - O žádném nevím TLD s čísly v něm.
    Na vedlejší poznámku povoluji TLD s až 6 znaky; nové přicházejí pravidelně a nikdy nevíte (no, některé budoucí mohou mít dokonce čísla, já vím).

  6. 11

    Ahoj,

    Snažím se to použít ve stávající podobě v reálném čase, ale nezdá se, že by se to ověřovalo v reálném čase, jako je vaše kontrola síly hesla ...

    Nebo jsem jen tak bezradný a nefunguje to pro mě?

  7. 12

    btw, opravdu se mi líbí, o co tu jdeš, tvé výukové programy jsou velmi jednoduché, určitě si tento přidám do záložek….

  8. 13
  9. 16
  10. 17

    Jen malá oprava: Regulární výraz má na konci znak extra () +. Mělo by se číst:

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

    S první z nich by byly přijaty libovolné délky TLD (což není skutečně špatné, jak zdůraznili ostatní, ale pokud by to byl záměr, výraz by mohl být zkrácen).

  11. 18

    Můžete vysvětlit regulární výraz tohoto kódu a jak funguje? Také o .test - Je .test výchozí příkaz v JavaScriptu pro kontrolu věcí, jako jste to udělali ve výše uvedeném kódu?

  12. 19

    Toto je krátký kód pro e-mailový výraz -

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

    }
    Deepak Rai
    varanasi

  13. 20

    Toto je krátký kód pro e-mailový výraz -

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

    }
    Deepak Rai
    varanasi

  14. 21
  15. 22
  16. 23

    Díky, ale v tomto regulárním výrazu je chyba. Nejsem odborník na regex, ale zkusil jsem e-mail:

    test @ test

    a to prošlo regexem ... všiml jsem si, že mu chybí únik z „.“ tak by to mělo být:

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

  17. 24
  18. 27

    To je jen hrubá kontrola, ale ne 100% přesná, například s tím by bylo v pořádku john_doe. @ gmail.com což ve skutečnosti není platná e-mailová adresa (tečka není povolena jako poslední znak v místní části e-mailu).
    Také by to přijalo john…doe@gmail.com což je také neplatné, protože v sekvenci nemůže být více než jedna tečka.

    To jsou jen některé nedostatky, které jsem si všiml na první pohled.
    Mým záměrem není napadat, jen abych na to upozornil v případě, že to někdo plánuje použít jako bezpečnostní kontrolu - není dostatečně zabezpečený.

    Informace o platných e-mailových adresách naleznete zde: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    Vlastně si myslím, že pro tečku musíte použít únik („.“). Vaše funkce by tedy měla být místo toho:

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

    }

    Jinak by tečka znamenala „jakýkoli znak“. Věřím, že těmto zvláštním postavám je třeba uniknout.

    Pozdravy,

    Federico

  20. 29

    funkce validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // hodnota pole s oříznutými mezerami
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var nelegálníChars = / [(),;: \ ”[]] /;

    if (fld.value == „Zadejte svou e-mailovou adresu“) {

    error = “Zadejte svou e-mailovou adresu.n”;
    } else if (! emailFilter.test (tfld)) {// otestovat e-mail na nelegální znaky

    error = “Zadejte platnou e-mailovou adresu.n”;
    } else if (fld.value.match (legalChars)) {

    error = “Zadejte platnou e-mailovou adresu.n”;
    }
    chyba návratu;
    }

  21. 30

    funkce validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // hodnota pole s oříznutými mezerami
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var nelegálníChars = / [(),;: \ ”[]] /;

    if (fld.value == „Zadejte svou e-mailovou adresu“) {

    error = “Zadejte svou e-mailovou adresu.n”;
    } else if (! emailFilter.test (tfld)) {// otestovat e-mail na nelegální znaky

    error = “Zadejte platnou e-mailovou adresu.n”;
    } else if (fld.value.match (legalChars)) {

    error = “Zadejte platnou e-mailovou adresu.n”;
    }
    chyba návratu;
    }

  22. 31

    funkce validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // hodnota pole s oříznutými mezerami
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var nelegálníChars = / [(),;: \ ”[]] /;

    if (fld.value == „Zadejte svou e-mailovou adresu“) {

    error = “Zadejte svou e-mailovou adresu.n”;
    } else if (! emailFilter.test (tfld)) {// otestovat e-mail na nelegální znaky

    error = “Zadejte platnou e-mailovou adresu.n”;
    } else if (fld.value.match (legalChars)) {

    error = “Zadejte platnou e-mailovou adresu.n”;
    }
    chyba návratu;
    }

  23. 32

    funkce validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // hodnota pole s oříznutými mezerami
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var nelegálníChars = / [(),;: \ ”[]] /;

    if (fld.value == „Zadejte svou e-mailovou adresu“) {

    error = “Zadejte svou e-mailovou adresu.n”;
    } else if (! emailFilter.test (tfld)) {// otestovat e-mail na nelegální znaky

    error = “Zadejte platnou e-mailovou adresu.n”;
    } else if (fld.value.match (legalChars)) {

    error = “Zadejte platnou e-mailovou adresu.n”;
    }
    chyba návratu;
    }

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

Co si myslíte?

Tyto stránky používají Akismet k omezení spamu. Zjistěte, jak jsou vaše údaje komentářů zpracovávány.