2013-02-22 23 views
7

Jestem nowy w JavaScript i znaleźć ten kod JavaScript w Internecie, który sprawdza poprawność podanego maila (nie ma problemu z kodem) -zrozumienie walidacji e-mail przy użyciu 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> 

mam żadnych problemów z kodem, ale Jakoś nie rozumiem, co oznacza wyrażenie regularne. Nie rozumiem, co oznacza każda część wyrażenia regularnego. Proszę, oświeć mnie.

+0

Myślisz, że to jest mylące ... spróbuj tego: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html. Sprawdzanie poprawności adresu e-mail w/regex jest trudne ... zobacz: http://programmers.stackexchange.com/questions/78353/how-far-should-one-take-e-mail-address-validation –

Odpowiedz

13
  1. Dwa ukośniki /.../ zawierają wyrazy regularne.

  2. Prowadzące^i końcowe $ odpowiadają odpowiednio początkowi i końcowi łańcucha wejściowego. Oznacza to, że cały łańcuch wejściowy powinien pasować do tego wyrażenia, zamiast do części ciągu wejściowego.

  3. \ w + dopasowuje 1 lub więcej znaków słownych (a-z, A-Z, 0-9 i podkreślenie).

  4. [.-] pasuje do znaku. lub. Musimy użyć. reprezentować . tak jak . ma specjalne znaczenie w wyrażeniu regularnym. Znak \ jest znany jako kod escape, który przywraca oryginalne znaczenie literowe następującej postaci.

  5. [.-]? dopasowuje 0 lub 1 wystąpienie [.-].

  6. Ponownie, \ w + dopasowuje 1 lub więcej znaków słownych.

  7. ([.-]? \ W +) * dopasowuje 0 lub więcej wystąpień [.-]? \ W +.

  8. Podekspozycja \ w + ([.-]? \ W +) * służy do dopasowania nazwy użytkownika w wiadomości e-mail przed znakiem @. Zaczyna się od co najmniej jednego znaku słownego (a-z, A-Z, 0-9 i podkreślenia), po którym następuje więcej znaków słownych lub. lub. Jednak. lub - musi następować po słowie znaków (a-z, A-Z, 0-9 i podkreślenie). Oznacza to, że ciąg nie może zawierać "..", "-", ".-" lub "-.". Przykładem prawidłowego ciągu są "a.1-2-3".

  9. @ pasuje do siebie.

  10. Ponownie, pod-wyrażenie \ w + ([.-]? \ W +) * służy do dopasowania nazwy domeny e-mail, z tym samym wzorcem, co nazwa użytkownika opisana powyżej.

  11. Podekstrakcja. \ W {2,3} pasuje do a. a następnie dwa lub trzy znaki słowne, np. ".com", ".edu", ".us", ".uk", ".co".

  12. (. \ W {2,3}) + określa, że ​​powyższe podeksperymentowanie wystąpi jeden lub więcej razy, np. ".com", ".co.uk", ".edu.sg" itp.

Reference

+0

W 8. tym część nie jest do końca prawdą - "Jednak, a. lub - musi następować po słowie" - ponieważ możesz mieć adres e-mail, gdzie - następuje @ - na przykład jak to sł[email protected] – Wojtek

3

Spróbuj tutaj REGEX

można znaleźć szczegółowe wyjaśnienia.

3

Oto rozbicie wyrażenia regularnego piece-by-Piece:


/^ => początku linii

\w+ => dowolne słowo (litery, cyfry i podkreślenia) powtórzone 1 lub więcej razy

([\.-]?\w+)* => A grupa z [opcjonalnie okres lub (DASH). (-), a następnie dowolnego wyrazu powtarza się raz lub więcej razy] które mogą być powtarzane 0 lub więcej razy

@\w+ => an na symbol (@) podążać za każdym słowie powtarzane jeden lub więcej razy

([\.-]?\w+)* => a grupa z [opcjonalnie okres lub deski rozdzielczej, a następnie każdy wyraz powtarzany 1 lub więcej razy] które mogą być powtarzane 0 lub więcej razy

(\.\w{2,3})+ => A grupa z [kropkę dowolnym słowem, które może być powtarzane 2-3 razy] może być powtarzana 1 lub więcej razy

$/ => końca linii


Nawiasem mówiąc, o to naprawdę dobry Introduction to Regular Expressions dostępny na Codular.

3

Spróbuj

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

on pracował dla mnie

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

ten mały piękno pozwoli Ci wprowadzić jeden lub więcej adresów e-mail w ciągu, kończąc z przecinkiem lub średnikiem, po którym następuje opcjonalna spacja. :)

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

Ten kod weryfikacyjny jest WRONG dla adresów e-mail. W szczególności nie zezwala na adresy formularza [email protected] Jest to powszechny błąd występujący na wielu komercyjnych stronach internetowych (ale nie stackoverflow - gratulacje!).