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 formoj kun pluraj retadresoj, estus bone fari class="emailaddress". Se vi havas la bibliotekon prototype.js (http://www.prototypejs.org) inkluzivita en la paĝo vi povas fari ion tian:

    var valida = vera;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$('.retpoŝtadreso').each( funkcio(retpoŝto) {
    se (!filtrilo.testo(retpoŝto.valoro)) {
    atentigo(?Bonvolu doni validan retadreson?);
    retpoŝto.fokuso;
    valida = malvera;
    }
    });
    reveno valida;

  2. 5
  3. 7

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

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

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

    Mia persona prefero estas kovri la plej multajn el la simplaj kazoj kaj doni averton pri ĉio alia prefere ol malakcepti ĝin. Se Bob vere volas submeti bob@com.museum anstataŭ bob@museum.com, kial ne lasi lin?

    • 8

      Saluton Reg,

      Vi povas testi la Regex uzante an Enreta Regex Tester.

      Ankaŭ, certe estas multe pli, kio povas esti farita se vi volas certigi retpoŝta adreso validas laŭ la RFC.

      Estas kelkaj kialoj por ne permesi iun enigi nevalidan retadreson:
      1. Ili ĝenos vin kiam la retpoŝto, kiun ili atendis, ne trapasos - sendepende de ĉu aŭ ne estis via kulpo, ke la adreso estis enmetita malĝuste.
      2. Se com.museum estis valida domajno kaj, ni diru, Yahoo! funkciigis ĝin - ajna retadreso kiu resaltis havus negativan efikon al la reputacio de via kompanio pri retpoŝta livero. Ĉi tio povus konduki al blokado de ĉiuj retpoŝtoj de via kompanio.
      3. Se via retpoŝta servo provizanto permesis vin eniri bob@com.museum, vi ankaŭ pagus por ĉiu retpoŝto sendita al tiu retadreso ĝis ili malabonus tiun adreson pro resaltoj. Mi forirus de ajna ESP kiu permesus nevalidan retpoŝtadreson tia - 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;
    – Per la fina modifilo /i ne necesas indiki la majusklan gamon.
    – Mi konas neniun TLD kun nombroj en ĝi.
    Flanka noto, mi ja permesas TLD kun ĝis 6 signoj; novaj alvenas regule kaj oni neniam scias (nu, estontaj eble eĉ havas numerojn en ĝi, mi scias).

  6. 11

    Saluton,

    Mi provas uzi ĉi tion en ekzistanta formo en reala tempo, sed ĉi tio ne ŝajnas esti valida en reala tempo kiel via pasvortkontrolilo...

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

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

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

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

    Kun la unua oni akceptus ajnajn longajn TLD-ojn (kio ne estas interne malĝusta kiel aliaj indikis, sed se tio estus la intenco la esprimo povus esti mallongigita).

  11. 18

    Ĉu vi bonvolu klarigi la regulan esprimon de ĉi tiu kodo kaj kiel ĝi funkcias? Ankaŭ pri .test - Ĉu .test estas defaŭlta deklaro en Javaskripto 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 (id)
    {
    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 (id)
    {
    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 regex-sperto, sed mi provis retpoŝton:

    testo@testo

    kaj ĝi pasis la regex... Mi rimarkis, ke mankas eskapi la "." do devus 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 kun john_doe.@gmail.com kiu fakte ne estas valida retadreso (punkto ne estas permesita 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 kelkaj mankoj, kiujn mi rimarkis je la unua vido.
    Mia intenco ne batas nur atentigi tion, se iu planas uzi ĉi tion kiel sekureckontrolon - ne sufiĉe sekura.

    Por informoj pri validaj retadresoj kontrolu ĉi tion: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

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

    funkcio validigi Retpoŝton (id)
    {
    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 karakteroj devas esti eskapitaj.

    salutoj,

    Federico

  20. 29

    funkcio validiRetpoŝton (fld) {
    var eraro="";
    var tfld = trim(fld.valoro); // valoro de kampo kun blankspaco fortondita
    var retpoŝtoFiltrilo = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Enigu vian retadreson") {

    eraro = "Bonvolu enigi vian Retadreson.n";
    } else if (!emailFilter.test(tfld)) { //prova retpoŝto por kontraŭleĝaj signoj

    eraro = "Bonvolu enigi validan retadreson.n";
    } else if (fld.value.match(nelegalChars)) {

    eraro = "Bonvolu enigi validan retadreson.n";
    }
    redoni eraron;
    }

  21. 30

    funkcio validiRetpoŝton (fld) {
    var eraro="";
    var tfld = trim(fld.valoro); // valoro de kampo kun blankspaco fortondita
    var retpoŝtoFiltrilo = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Enigu vian retadreson") {

    eraro = "Bonvolu enigi vian Retadreson.n";
    } else if (!emailFilter.test(tfld)) { //prova retpoŝto por kontraŭleĝaj signoj

    eraro = "Bonvolu enigi validan retadreson.n";
    } else if (fld.value.match(nelegalChars)) {

    eraro = "Bonvolu enigi validan retadreson.n";
    }
    redoni eraron;
    }

  22. 31

    funkcio validiRetpoŝton (fld) {
    var eraro="";
    var tfld = trim(fld.valoro); // valoro de kampo kun blankspaco fortondita
    var retpoŝtoFiltrilo = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Enigu vian retadreson") {

    eraro = "Bonvolu enigi vian Retadreson.n";
    } else if (!emailFilter.test(tfld)) { //prova retpoŝto por kontraŭleĝaj signoj

    eraro = "Bonvolu enigi validan retadreson.n";
    } else if (fld.value.match(nelegalChars)) {

    eraro = "Bonvolu enigi validan retadreson.n";
    }
    redoni eraron;
    }

  23. 32

    funkcio validiRetpoŝton (fld) {
    var eraro="";
    var tfld = trim(fld.valoro); // valoro de kampo kun blankspaco fortondita
    var retpoŝtoFiltrilo = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Enigu vian retadreson") {

    eraro = "Bonvolu enigi vian Retadreson.n";
    } else if (!emailFilter.test(tfld)) { //prova retpoŝto por kontraŭleĝaj signoj

    eraro = "Bonvolu enigi validan retadreson.n";
    } else if (fld.value.match(nelegalChars)) {

    eraro = "Bonvolu enigi validan retadreson.n";
    }
    redoni 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.