Kontrolu Retpoŝtadreson per Ĝavoskripto kaj Regulaj Esprimoj

Antaŭ iom da tempo mi starigis Pasvorta Forta Kontrolilo per Ĝavoskripto kaj Regulaj Esprimoj. Sur tiu sama noto, vi ankaŭ povas kontroli la strukturon de retpoŝta adreso uzante la saman metodon pri regula esprimo (regex).

Se via formo-elemento havas la identigilo = "retadreso" kaj vi aldonas formularon onSubmit = ”return checkEmail ();“, Ĉi tio estas Ĝavaskripta funkcio, kiun vi povas uzi por redoni alarmon se la retpoŝta adreso havas validan strukturon aŭ 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;
}
}

La funkcio validigas la enhavon de la retpoŝto al tiu de la filtrilo. Se la komparo malsukcesas, ĝi aperigas alarmon kaj redonas la fokuson al la retpoŝta kampo!

41 Komentoj

  1. 1

    Por formularoj kun pluraj retpoŝtadresoj, estus bone fari class = "retadreson". Se vi havas la bibliotekon prototype.js (http://www.prototypejs.org) inkluzivita en la paĝo vi povas fari ion tian:

    var valid = vera;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. retadreso'). ĉiu (funkcio (retpoŝto) {
    if (! filter.test (email.value)) {
    atentigo (? Bonvolu doni validan retpoŝtadreson?);
    retpoŝto.fokuso;
    valida = false;
    }
    });
    reveno valida;

  2. 5
  3. 7

    Mi ŝatas la ideon, sed mi hezitus adopti ĉi tiun apartan regulan esprimon sen priskribo de kiuj laŭleĝaj retpoŝtaj adresoj ĝi ne akceptas kaj kiujn kontraŭleĝajn adresojn ĝi permesas.

    Por ekzemplo de regula esprimo, kiu plenumas decan laboron kune kun klarigo pri kiuj kazoj ĝi ne traktas, vidu ĉi tion:

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

    Mia persona prefero estas kovri la plej multajn simplajn kazojn kaj eldoni averton pri ĉio alia anstataŭ malakcepti ĝin. Se Bob vere volas submetiĝi bob@com.museum anstataŭ bob@museum.com, kial ne lasi lin?

    • 8

      Saluton,

      Vi povas elprovi la Regex uzante Interreta Regex-Testilo.

      Ankaŭ certe estas multe pli farebla se vi volas certigi retpoŝta adreso validas laŭ RFC.

      Estas kelkaj kialoj por ne permesi al iu enigi nevalidan retpoŝtan adreson:
      1. Ili ĝenos vin, kiam la retpoŝto, kiun ili atendis, ne trapasos - sendepende de ĉu via kulpo aŭ ne la adreso estis malĝuste enmetita.
      2. Se com.museum estis valida domajno kaj, ni diru, Yahoo! funkciigis ĝin - ĉiu retpoŝta adreso, kiu resaltus, havus negativan efikon sur la reputacio de via kompanio pri retpoŝta liverado. Ĉi tio povus konduki al blokado de la tuta retpoŝto de via kompanio.
      3. Se via retpoŝta serva provizanto permesis al vi eniri bob@com.museum, vi ankaŭ pagus por ĉiu retpoŝto sendita al tiu retpoŝta adreso ĝis ili malabonigis tiun adreson pro resaltoj. Mi evitus iun ESP, kiu permesus tiel nevalidan retpoŝtan adreson - ili nur prenas vian monon!

      Dankon pro ĉesi!
      Doug

  4. 9
  5. 10

    Estas multe pli simpla maniero skribi la esprimon:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Kun la fina modifilo / i ne necesas indiki la majusklan gamon.
    - Mi scias neniun TLD kun nombroj en ĝi.
    Flanke, mi ja permesas TLD kun ĝis 6 signoj; novaj alvenas regule kaj vi neniam scias (nu, iuj estontaj eble eĉ havas nombrojn en ĝi, mi scias).

  6. 11

    Saluton,

    Mi volas uzi ĉi tion en ekzistanta formo en reala tempo, sed ĉi tio ŝajnas ne validi realtempe kiel via pasvorta kontrolilo ...

    Aŭ, ĉu mi nur estas tiel senkonsila, kaj ĝi ne funkcias por mi?

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

    Nur malgranda korekto: La regula esprimo havas ekstran () + ĉe la fino. Ĝi devas legi:

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

    Kun la unua iu ajn longeco TLD-oj estus akceptita (kio ne estas interne malĝusta kiel aliaj atentigis, sed se tio estus la intenco la esprimo povus esti mallongigita).

  11. 18

    Ĉu vi bonvolas klarigi la regulan esprimon de ĉi tiu kodo kaj kiel ĝi funkcias? Ankaŭ pri .test - Ĉu .test estas apriora aserto en ĝavaskripto por kontroli aferojn kiel vi faris en la supra kodo?

  12. 19

    Ĉi tio estas mallonga kodo por retpoŝta esprimo-

    funkcio validigi Retpoŝton (identigilo)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    resendi retpoŝtonPattern.test (id);

    }
    Deepak Rai
    varanasi

  13. 20

    Ĉi tio estas mallonga kodo por retpoŝta esprimo-

    funkcio validigi Retpoŝton (identigilo)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    resendi retpoŝtonPattern.test (id);

    }
    Deepak Rai
    varanasi

  14. 21
  15. 22
  16. 23

    Dankon, sed estas eraro en ĉi tiu regex. Mi ne estas regula eksperto, sed mi provis retpoŝti:

    provo @ testo

    kaj ĝi preterpasis la regulon ... Mi rimarkis, ke mankas eskapi de la "." do ĝi devas esti:

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

  17. 24
  18. 27

    Nu, ĉi tio estas nur malglata kontrolo sed ne 100% preciza, ekzemple ĉi tio estus en ordo john_doe. @ gmail.com kiu fakte ne estas valida retpoŝta adreso (punkto ne estas permesata kiel lasta signo en loka parto de retpoŝto).
    Ankaŭ ĝi akceptus john…doe@gmail.com kiu ankaŭ estas malvalida ĉar ne povas esti pli ol unu punkto en sinsekvo.

    Ĉi tiuj estas nur iuj difektoj, kiujn mi rimarkis unuavide.
    Mia intenco ne bategas nur por atentigi pri tio, se iu planas uzi ĉi tion kiel sekurecan kontrolon - ne sufiĉe sekura.

    Por informoj pri validaj retpoŝtaj adresoj kontrolu ĉi tion: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    Fakte, mi pensas, ke vi bezonas apliki eskapon por la punkto ("."). Do via funkcio devas esti anstataŭe:

    funkcio validigi Retpoŝton (identigilo)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    resendi retpoŝtonPattern.test (id);

    }

    Alie, la punkto signifus "ajna signo". Mi kredas, ke tiaj specialaj signoj devas eskapi.

    salutoj,

    Federico

  20. 29

    funkcio validigi Retpoŝton (fld) {
    var eraro = ””;
    var tfld = trim (fld.value); // valoro de kampo kun blanka spaco forhakita
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Enigu vian retpoŝtan adreson") {

    eraro = "Bonvolu enigi vian retpoŝtan adreson.n";
    } else if (! emailFilter.test (tfld)) {// provi retpoŝton pri kontraŭleĝaj signoj

    eraro = "Bonvolu enigi validan retpoŝtan adreson.n";
    } else if (fld.value.match (illegalChars)) {

    eraro = "Bonvolu enigi validan retpoŝtan adreson.n";
    }
    resendi eraron;
    }

  21. 30

    funkcio validigi Retpoŝton (fld) {
    var eraro = ””;
    var tfld = trim (fld.value); // valoro de kampo kun blanka spaco forhakita
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Enigu vian retpoŝtan adreson") {

    eraro = "Bonvolu enigi vian retpoŝtan adreson.n";
    } else if (! emailFilter.test (tfld)) {// provi retpoŝton pri kontraŭleĝaj signoj

    eraro = "Bonvolu enigi validan retpoŝtan adreson.n";
    } else if (fld.value.match (illegalChars)) {

    eraro = "Bonvolu enigi validan retpoŝtan adreson.n";
    }
    resendi eraron;
    }

  22. 31

    funkcio validigi Retpoŝton (fld) {
    var eraro = ””;
    var tfld = trim (fld.value); // valoro de kampo kun blanka spaco forhakita
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Enigu vian retpoŝtan adreson") {

    eraro = "Bonvolu enigi vian retpoŝtan adreson.n";
    } else if (! emailFilter.test (tfld)) {// provi retpoŝton pri kontraŭleĝaj signoj

    eraro = "Bonvolu enigi validan retpoŝtan adreson.n";
    } else if (fld.value.match (illegalChars)) {

    eraro = "Bonvolu enigi validan retpoŝtan adreson.n";
    }
    resendi eraron;
    }

  23. 32

    funkcio validigi Retpoŝton (fld) {
    var eraro = ””;
    var tfld = trim (fld.value); // valoro de kampo kun blanka spaco forhakita
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Enigu vian retpoŝtan adreson") {

    eraro = "Bonvolu enigi vian retpoŝtan adreson.n";
    } else if (! emailFilter.test (tfld)) {// provi retpoŝton pri kontraŭleĝaj signoj

    eraro = "Bonvolu enigi validan retpoŝtan adreson.n";
    } else if (fld.value.match (illegalChars)) {

    eraro = "Bonvolu enigi validan retpoŝtan adreson.n";
    }
    resendi eraron;
    }

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

Kion vi pensas?

Ĉi tiu retejo uzas Akismeton por redukti spamon. Lernu, kiel via komento datiĝas.