2013-02-22 4 views
7

Ich bin neu in JavaScript und fand diesen JavaScript-Code im Internet, der die angegebenen E-Mail (kein Problem mit dem Code) validiert -Verständnis E-Mail-Validierung mit Hilfe von 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> 

Ich habe keine Probleme mit dem Code, aber Ich verstehe irgendwie nicht, was der reguläre Ausdruck /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/ bedeutet. Ich verstehe nicht, was jeder Teil des regulären Ausdrucks bedeutet. Bitte erleuchte mich.

+0

Sie denken, das ist verwirrend ... versuchen Sie dies: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html. Das Überprüfen einer E-Mail mit einem Regex ist schwierig ... siehe: http://programmers.stackexchange.com/questions/78353/how-far-should-one-take-e-mail-address-validation –

Antwort

13
  1. Die beiden Forward-Schrägstriche /.../ enthalten eine Regexe.

  2. Die führenden^und nachfolgenden $ stimmen mit dem Anfang und dem Ende der Eingabezeichenfolge überein. Das heißt, die gesamte Eingabezeichenfolge muss mit dieser Regexe übereinstimmen und nicht mit einem Teil der Eingabezeichenfolge.

  3. \ w + entspricht einem oder mehreren Wortzeichen (a-z, A-Z, 0-9 und Unterstrich).

  4. [.-] entspricht Zeichen. oder -. Wir müssen verwenden. zu repräsentieren . wie . hat in regexe eine besondere Bedeutung. Das \ ist bekannt als der Escape-Code, der die ursprüngliche wörtliche Bedeutung des folgenden Zeichens wiederherstellt.

  5. [.-]? entspricht 0 oder 1 Auftreten von [.-].

  6. Wieder entspricht \ w + einem oder mehreren Wortzeichen.

  7. ([.-]? \ W +) * entspricht 0 oder mehr Vorkommen von [.-]? \ W +.

  8. Der Unterausdruck \ w + ([.-]? \ W +) * wird verwendet, um den Benutzernamen in der E-Mail vor dem @ -Zeichen abzugleichen. Es beginnt mit mindestens einem Wortzeichen (a-z, A-Z, 0-9 und Unterstrich), gefolgt von weiteren Wortzeichen oder. oder -. Jedoch a. oder - muss durch ein Wortzeichen (a-z, A-Z, 0-9 und Unterstrich) folgen. Das heißt, die Zeichenfolge darf nicht "..", "-", ".-" oder "-." Enthalten. Beispiel für gültige Zeichenfolge sind "a.1-2-3".

  9. Das @ passt sich an.

  10. Wieder wird der Unterausdruck \ w + ([.-]? \ W +) * verwendet, um den E-Mail-Domänennamen mit demselben Muster wie der oben beschriebene Benutzername abzugleichen.

  11. Der Unterausdruck. \ W {2,3} stimmt mit a überein. gefolgt von zwei oder drei Wortzeichen, z. B. ".com", ".edu", ".us", ".uk", ".co".

  12. (. \ W {2,3}) + gibt an, dass der obige Unterausdruck ein- oder mehrmals vorkommen soll, z. B. ".com", ".co.uk", ".edu.sg" etc.

Reference

+0

In 8. dies Teil ist nicht ganz richtig - "Allerdings muss ein .oder - durch ein Wortzeichen folgen" - da Sie eine E-Mail-Adresse haben können - wird von @ gefolgt - zum Beispiel wie dieses [email protected] – Wojtek

3

ein hier versuchen REGEX

Sie eine detaillierte Erklärung finden.

3

Hier ist ein Zusammenbruch des regulären Ausdrucks Stück-für-Stück:


/^ => Anfang einer Zeile

\w+ => jedes Wort (Buchstaben, Ziffern und Unterstriche) wiederholt 1 oder mehrmals

([\.-]?\w+)* => a Gruppe von [einem optionalen Zeitraum oder Strich (.) (-), gefolgt von einem Wort wiederholt ein oder mehr Male], die 0 oder mehrmals wiederholt werden können

@\w+ => ein am Symbol (@) folgt, wiederholt durch jedes Wort ein oder mehr Male

([\.-]?\w+)* => a Gruppe von [optionaler Periode oder dash jedes Wort wiederholt, gefolgt 1 oder mehr Male], die 0 wiederholt werden kann oder mehr mal

(\.\w{2,3})+ => a Gruppe von [eine Periode von einem Wort gefolgt, die 2-3-mal wiederholt werden kann], die 1 wiederholt werden kann oder mehrmals

$/ => das Ende einer Zeile


By the way, ist hier ein wirklich gute Introduction to Regular Expressions auf Codular zur Verfügung.

3

Versuchen Sie, diese

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

Es funktionierte für mich

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

diese kleine Schönheit können Sie eine oder mehrere E-Mail-Adressen in einer Zeichenfolge eingeben, mit einem Komma oder Semikolon enden, gefolgt von einem optionalen Leerzeichen. :)

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

Dieser Validierungscode ist falsch für E-Mail-Adressen. Insbesondere sind Adressen des Formulars [email protected] nicht erlaubt. Dies ist ein weit verbreiteter Fehler, der auf vielen kommerziellen Websites gefunden wurde (aber nicht Stackoverflow - Glückwunsch!).