Controlla l'indirizzo email con JavaScript ed espressioni regolari

Qualche tempo fa ho messo su un file Verifica della sicurezza della password utilizzando JavaScript ed espressioni regolari. Sulla stessa nota, puoi anche controllare la struttura di un indirizzo email utilizzando la stessa metodologia di espressioni regolari (regex).

Se il tuo elemento del modulo ha l'estensione id = "emailaddress" e aggiungi un modulo onSubmit = ”return checkEmail ();", Questa è una funzione Javascript che puoi utilizzare per restituire un avviso se l'indirizzo email ha una struttura valida o meno:

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 funzione convalida il contenuto dell'e-mail a quello del filtro. Se il confronto fallisce, viene visualizzato un avviso e riporta il focus sul campo dell'indirizzo e-mail!

Commenti

  1. 1

    Per i moduli con più indirizzi e-mail, sarebbe bene fare class = "emailaddress". Se hai la libreria prototype.js (http://www.prototypejs.org) incluso nella pagina puoi fare qualcosa del genere:

    var valido = vero;
    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)) {
    avviso (? Fornisci un indirizzo email valido?);
    email.focus;
    valido = falso;
    }
    });
    ritorno valido;

  2. 5
  3. 7

    Mi piace l'idea, ma esiterei ad adottare questa particolare espressione regolare senza la descrizione di quali indirizzi di posta elettronica legali non accetta e quali indirizzi illegali consente.

    Per un esempio di un'espressione regolare che fa un lavoro decente insieme a una spiegazione di quali casi non copre, vedere questo:

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

    La mia preferenza personale è di coprire la maggior parte dei casi semplici e di emettere un avvertimento per tutto il resto piuttosto che rifiutarlo. Se Bob vuole davvero sottomettermi bob@com.museum anziché bob@museum.com, perché non lasciarlo?

    • 8

      Ciao Reg,

      Puoi testare il Regex utilizzando un file Tester Regex in linea.

      Inoltre, c'è sicuramente molto di più che può essere fatto se vuoi assicurarti un file indirizzo email è valido in conformità con l'RFC.

      Ci sono alcuni motivi per non consentire a qualcuno di inserire un indirizzo email non valido:
      1. Saranno infastiditi con te quando l'e-mail che si aspettavano non arriva, indipendentemente dal fatto che sia stata colpa tua o meno l'indirizzo è stato inserito in modo errato.
      2. Se com.museum fosse un dominio valido e, diciamo, Yahoo! lo gestiva: qualsiasi indirizzo e-mail che rimbalzava avrebbe un impatto negativo sulla reputazione della tua azienda per la consegna della posta. Ciò potrebbe causare il blocco di tutte le email della tua azienda.
      3. Se il provider del servizio di posta elettronica ti ha consentito di entrare bob@com.museum, pagherai anche per ogni e-mail inviata a quell'indirizzo e-mail fino a quando non hanno annullato l'iscrizione a quell'indirizzo a causa di rimbalzi. Eviterei qualsiasi ESP che consenta un indirizzo email non valido come quello: stanno solo prendendo i tuoi soldi!

      Grazie per esserti fermato!
      Doug

  4. 9
  5. 10

    C'è un modo molto più semplice per scrivere l'espressione:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Con il modificatore finale / i non è necessario indicare l'intervallo maiuscolo.
    - Non ne conosco nessuno TLD con i numeri in esso.
    In una nota a margine, consento TLD con un massimo di 6 caratteri; ne arrivano di nuovi regolarmente e non si sa mai (beh, somme quelli futuri potrebbero anche contenere dei numeri, lo so).

  6. 11

    Hi there,

    Sto cercando di utilizzarlo in un modulo esistente in tempo reale, ma non sembra convalidare in tempo reale come il controllo della sicurezza della password ...

    O sono solo così incapace e non funziona per me?

  7. 12

    a proposito, mi piace molto quello che stai facendo qui, i tuoi tutorial sono molto semplici, sicuramente lo metterò nei segnalibri….

  8. 13
  9. 16
  10. 17

    Solo una piccola correzione: l'espressione regolare ha un () + in più alla fine. Dovrebbe leggere:

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

    Con il primo sarebbero accettati TLD di qualsiasi lunghezza (il che non è intrinsecamente sbagliato come altri hanno sottolineato, ma se questa fosse l'intenzione l'espressione potrebbe essere abbreviata).

  11. 18

    Puoi spiegare l'espressione regolare di questo codice e come funziona? Anche su .test - .test è un'istruzione predefinita in javascript per controllare cose come hai fatto nel codice sopra?

  12. 19

    Questo è un codice breve per l'espressione di posta elettronica-

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

    }
    Deepak Rai
    Varanasi

  13. 20

    Questo è un codice breve per l'espressione di posta elettronica-

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

    }
    Deepak Rai
    Varanasi

  14. 21
  15. 22
  16. 23

    Grazie, ma c'è un errore in questa regex. Non sono un esperto di regex, ma ho provato l'email:

    test

    e ha passato la regex ... ho notato che manca sfuggendo al "." quindi dovrebbe essere:

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

  17. 24
  18. 27

    Bene, questo è solo un controllo approssimativo ma non accurato al 100%, ad esempio andrebbe bene john_doe. @ gmail.com che in realtà non è un indirizzo e-mail valido (il punto non è consentito come ultimo carattere nella parte locale dell'e-mail).
    Inoltre accetterebbe john…doe@gmail.com anche questo non è valido poiché non può esserci più di un punto in una sequenza.

    Questi sono solo alcuni difetti che ho notato a prima vista.
    La mia intenzione non è colpire solo per farlo notare nel caso qualcuno abbia intenzione di usarlo come controllo di sicurezza - non abbastanza sicuro.

    Per informazioni su indirizzi e-mail validi controlla questo: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    In realtà, penso che sia necessario applicare un'escape per il punto ("."). Quindi, la tua funzione dovrebbe essere, invece:

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

    }

    Altrimenti, il punto significherebbe "qualsiasi carattere". Credo che questi caratteri speciali debbano essere evitati.

    Saluti,

    Federico

  20. 29

    function validateEmail (fld) {
    var error = "";
    var tfld = trim (fld.value); // valore del campo con spazi bianchi tagliati
    var emailFilter = /^[^@”+@[^@.”+.[^@”*ww$/;
    var illegaleChars = / [(),;: \ ”[]] /;

    if (fld.value == "Enter your email Address") {

    errore = "Inserisci il tuo indirizzo e-mail.n";
    } else if (! emailFilter.test (tfld)) {// verifica la presenza di caratteri illegali nella posta elettronica

    errore = "Immettere un indirizzo e-mail valido.n";
    } altrimenti if (fld.value.match (illegaleChars)) {

    errore = "Immettere un indirizzo e-mail valido.n";
    }
    errore di ritorno;
    }

  21. 30

    function validateEmail (fld) {
    var error = "";
    var tfld = trim (fld.value); // valore del campo con spazi bianchi tagliati
    var emailFilter = /^[^@”+@[^@.”+.[^@”*ww$/;
    var illegaleChars = / [(),;: \ ”[]] /;

    if (fld.value == "Enter your email Address") {

    errore = "Inserisci il tuo indirizzo e-mail.n";
    } else if (! emailFilter.test (tfld)) {// verifica la presenza di caratteri illegali nella posta elettronica

    errore = "Immettere un indirizzo e-mail valido.n";
    } altrimenti if (fld.value.match (illegaleChars)) {

    errore = "Immettere un indirizzo e-mail valido.n";
    }
    errore di ritorno;
    }

  22. 31

    function validateEmail (fld) {
    var error = "";
    var tfld = trim (fld.value); // valore del campo con spazi bianchi tagliati
    var emailFilter = /^[^@”+@[^@.”+.[^@”*ww$/;
    var illegaleChars = / [(),;: \ ”[]] /;

    if (fld.value == "Enter your email Address") {

    errore = "Inserisci il tuo indirizzo e-mail.n";
    } else if (! emailFilter.test (tfld)) {// verifica la presenza di caratteri illegali nella posta elettronica

    errore = "Immettere un indirizzo e-mail valido.n";
    } altrimenti if (fld.value.match (illegaleChars)) {

    errore = "Immettere un indirizzo e-mail valido.n";
    }
    errore di ritorno;
    }

  23. 32

    function validateEmail (fld) {
    var error = "";
    var tfld = trim (fld.value); // valore del campo con spazi bianchi tagliati
    var emailFilter = /^[^@”+@[^@.”+.[^@”*ww$/;
    var illegaleChars = / [(),;: \ ”[]] /;

    if (fld.value == "Enter your email Address") {

    errore = "Inserisci il tuo indirizzo e-mail.n";
    } else if (! emailFilter.test (tfld)) {// verifica la presenza di caratteri illegali nella posta elettronica

    errore = "Immettere un indirizzo e-mail valido.n";
    } altrimenti if (fld.value.match (illegaleChars)) {

    errore = "Immettere un indirizzo e-mail valido.n";
    }
    errore di ritorno;
    }

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

Cosa ne pensi?

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati dei tuoi commenti.