2013-02-22 7 views
7

Sono nuovo di Javascript e trovato questo codice JavaScript in internet che convalida il dato e-mail (nessun problema con il codice) -convalida email comprensione utilizzando JavaScript

<html> 
<h2>Email Validation</h2> 
<script language = "Javascript"> 
function checkEmail(emailId) { 
if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(emailId)){ 
document.write("You have entered valid email."); 
return true; 
}  
return false; 
} 

function ValidateEmail(){ 
    var emailID=document.form.email; 

    if ((emailID.value==null)||(emailID.value=="")){ 
     alert("Please Enter your Email ID") 
     emailID.focus() 
     return false 
    } 

    if (checkEmail(emailID.value)==false){ 
     emailID.value="" 
     alert("Invalid Email Adderess"); 
     emailID.focus() 
     return false 
    } 
     alert('valid'); 
     return true 
} 
</script> 

<form name="form" method="post" onSubmit="return ValidateEmail()">  
Enter an Email Address : <input type="text" name="email" size="30"><br>  
<input type="submit" name="Submit" value="Submit">  
</form> 

</html> 

Non ho problemi con il codice, ma In qualche modo non sono riuscito a capire cosa significa l'espressione regolare /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/. Non capisco cosa significhi ciascuna parte della espressione regolare. Per favore, illuminami.

+0

Pensi che sia confuso ... prova questo: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html. Convalidare un'e-mail con un'espressione regolare è difficile ... vedi: http://programmers.stackexchange.com/questions/78353/how-far-should-one-take-e-mail-address-validation –

risposta

13
  1. Le due barre di avanzamento /.../ contengono un'espressione regolare.

  2. I valori iniziali e finali $ corrispondono rispettivamente all'inizio e alla fine della stringa di input. Cioè, l'intera stringa di input deve corrispondere a questa regexe, invece di una parte della stringa di input.

  3. \ w + corrisponde a 1 o più caratteri di parola (a-z, A-Z, 0-9 e trattino basso).

  4. [.-] corrisponde al carattere. o -. Dobbiamo usare. rappresentare . come . ha un significato speciale in regexe. Il \ è conosciuto come il codice di escape, che ripristina il significato letterale originale del seguente carattere.

  5. [.-]? corrisponde a 0 o 1 occorrenza di [.-].

  6. Ancora, \ w + corrisponde a 1 o più caratteri di parola.

  7. ([.-]? \ W +) * corrisponde a 0 o più occorrenze di [.-]? \ W +.

  8. L'espressione secondaria \ w + ([.-]? \ W +) * viene utilizzata per abbinare il nome utente nell'e-mail, prima del segno @. Inizia con almeno un carattere di parola (a-z, A-Z, 0-9 e sottolineatura), seguito da più caratteri di parole o. o -. Tuttavia, a. oppure - deve seguire un carattere di parola (a-z, A-Z, 0-9 e carattere di sottolineatura). Cioè, la stringa non può contenere "..", "-", ".-" o "-.". Esempio di stringa valida sono "a.1-2-3".

  9. Il simbolo @ corrisponde a se stesso.

  10. Ancora una volta, la sottoespressione \ w + ([.-]? \ W +) * viene utilizzata per abbinare il nome del dominio di posta elettronica, con lo stesso schema del nome utente sopra descritto.

  11. La sottoespressione. \ W {2,3} corrisponde a. seguito da due o tre caratteri di parole, ad esempio ".com", ".edu", ".us", ".uk", ".co".

  12. (. \ W {2,3}) + specifica che la sotto-espressione di cui sopra deve avvenire una o più volte, ad esempio ".com", ".co.uk", ".edu.sg" eccetera.

Reference

+0

In 8. this parte non è del tutto vera - "Tuttavia, a. o - deve seguire un carattere di parola" - perché puoi avere un indirizzo email dove - è seguito da @ - ad esempio come this [email protected] – Wojtek

3

dare una prova qui REGEX

è possibile trovare una spiegazione dettagliata.

3

Ecco una rottura verso il basso dell'espressione regolare pezzo per pezzo:


/^ => all'inizio di una riga

\w+ => qualsiasi parola (lettere, numeri e trattini bassi ripetuti 1 o più volte

([\.-]?\w+)* => un gruppo di [un periodo opzionale o un trattino (.) (-) seguito da un termine ripetuto una o più volte] ripetibili 0 o più volte

@\w+ => un al simbolo (@) seguite da un termine ripetuto uno o più volte

([\.-]?\w+)* => un gruppo di [un periodo opzionale o trattino seguito qualsiasi parola ripetuta 1 o più volte] ripetibili 0 o più orari

(\.\w{2,3})+ => un gruppo di [un punto seguito da un termine che può essere ripetuto 2-3 volte] che può essere ripetuta 1 o più volte

$/ => alla fine di una linea


a proposito, ecco un davvero buona Introduction to Regular Expressions accessibile Codular.

3

Prova questa

E-mail: <input type="email" name="usremail">

Ha funzionato per me

1
/^(\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+[,;]?[ ]?)+$/ 

questa piccola bellezza vi permetterà di inserire uno o più indirizzi e-mail in una stringa, che termina con una virgola o virgola, seguito da uno spazio opzionale. :)

0
function validchat(){ 
    $('#btn-input-email').blur(function() { 
     if($(this).val() != '') { 
      var pattern = /^([a-z0-9_\.-])[email protected][a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i; 
      if(pattern.test($(this).val())){ 
       $(this).css({'border' : '1px solid #569b44'}); 
       $('#valid').text(''); 
      } else { 
       $(this).css({'border' : '1px solid #ff0000'}); 
       $('#valid').text('Не верно'); 
      } 
     } else { 
      $(this).css({'border' : '1px solid #ff0000'}); 
      $('#valid').text('Поле email не должно быть пустым'); 
     } 
    }); 
    $("#btn-input-text").blur(function() { 
     var textlength = $(this).val().trim().length; 
     if(textlength < 2){ 
      $(this).css({'border' : '1px solid #ff0000'}); 
      $('#validtext').text('Минимум 2 символ'); 
     }else{ 
      $(this).css({'border' : '1px solid #569b44'}); 
      $('#validtext').text(''); 
     } 
    }); 
    var valid = $('#valid').text(); 
    var validtext = $('#validtext').text(); 
    if((!valid || valid == '') && (!validtext || validtext == '')){ 
     return true; 
    } 
} 
validchat(); 
function AjaxChat() { 
    $('#btn-input-email , #btn-input-text').blur(); 
    var valid = validchat(); 
    if(valid){ 
     var email = $('#btn-input-email').val(); 
     var text = $('#btn-input-text').val(); 

     var data = { 
      email:email, 
      text:text 
     } 

     $.ajax({ 
      url: location.origin+"/chat_block.php", 
      //dataType: "json", ////Тип данных 
      type: "POST", 
      async: false, 
      data: data, 
      success: function(html) { 
       if(!html || html == 'null') AjaxChat(); 
       if (jQuery.html != "") { 
        var b_chat = $('.chat-customer').html(); 
        var chat = 'Вы: '; 
        var obj = $.parseJSON(html); 
        chat += '<span>'; 
        chat += obj['text']; 
        chat += '</span>'; 
        chat += '<br /><br />'; 
        $('.chat-customer').html(b_chat + chat); 
        $('#btn-input-text , #btn-input-email').val(""); 
       } 
      }, 
      error: function() { 
       //cosole.log('No result'); 
      } 
     }); 
     $('#btn-input-email').remove(); 
    } 
} 
0

Questo codice di convalida è ERRATO per gli indirizzi di posta elettronica. In particolare, non consente gli indirizzi del modulo [email protected] Questo è un errore diffuso trovato su molti siti web commerciali (ma non stackoverflow - congratulazioni!).