2013-02-22 22 views
7

Tôi mới vào JavaScript và tìm thấy mã JavaScript này trong internet mà xác nhận email được cung cấp (không có vấn đề với mã) -xác nhận email hiểu biết sử dụng 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> 

Tôi không có vấn đề với mã này, nhưng Tôi bằng cách nào đó không hiểu những gì biểu thức chính quy /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/ có nghĩa là. Tôi không hiểu ý nghĩa của từng phần biểu hiện chính quy. Vui lòng làm sáng tỏ cho tôi.

+0

Bạn nghĩ rằng điều đó gây nhầm lẫn ... hãy thử cách này: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html. Việc xác thực email w/regex là khó khăn ... xem: http://programmers.stackexchange.com/questions/78353/how-far-should-one-take-e-mail-address-validation –

Trả lời

13
  1. Hai dấu gạch chéo chuyển tiếp/.../ chứa regexe.

  2. Hàng đầu^và cuối $ khớp với phần đầu và phần cuối của chuỗi đầu vào tương ứng. Nghĩa là, toàn bộ chuỗi đầu vào phải khớp với regexe này, thay vì một phần của chuỗi đầu vào.

  3. \ w + khớp với 1 hoặc nhiều ký tự từ (a-z, A-Z, 0-9 và dấu gạch dưới).

  4. [.-] khớp với ký tự. hoặc là -. Chúng ta cần phải sử dụng. để đại diện cho . như . có ý nghĩa đặc biệt trong regexe. Các \ được gọi là mã thoát, mà khôi phục lại ý nghĩa chữ gốc của nhân vật sau đây.

  5. [.-]? khớp với 0 hoặc 1 lần xuất hiện của [.-].

  6. Một lần nữa, \ w + khớp với 1 hoặc nhiều ký tự từ.

  7. ([.-]? \ W +) * khớp với 0 hoặc nhiều lần xuất hiện của [.-]? \ W +.

  8. Biểu thức con \ w + ([.-]? \ W +) * được sử dụng để khớp với tên người dùng trong email, trước ký hiệu @. Nó bắt đầu với ít nhất một ký tự từ (a-z, A-Z, 0-9 và dấu gạch dưới), theo sau là nhiều ký tự từ hoặc. hoặc là -. Tuy nhiên, a. hoặc - phải tuân theo một ký tự từ (a-z, A-Z, 0-9 và dấu gạch dưới). Nghĩa là, chuỗi không thể chứa "..", "-", ".-" hoặc "-.". Ví dụ về chuỗi hợp lệ là "a.1-2-3".

  9. @ trùng khớp với chính nó.

  10. Một lần nữa, biểu thức con \ w + ([.-]? \ W +) * được sử dụng để khớp với tên miền email, với cùng mẫu với tên người dùng được mô tả ở trên.

  11. Biểu thức con. \ W {2,3} khớp với a. theo sau là hai hoặc ba ký tự từ, ví dụ: ".com", ".edu", ".us", ".uk", ".co".

  12. (. \ W {2,3}) + chỉ định rằng biểu thức con trên sẽ xảy ra một hoặc nhiều lần, ví dụ: ".com", ".co.uk", ".edu.sg" v.v.

Reference

+0

Trong 8. điều này một phần không hoàn toàn đúng - "Tuy nhiên, a. hoặc - phải tuân theo một ký tự từ" - bởi vì bạn có thể có địa chỉ email ở đâu - được theo sau bởi @ - ví dụ như từ[email protected] – Wojtek

3

tặng một thử đây REGEX

bạn có thể tìm thấy một lời giải thích chi tiết.

3

Dưới đây là bảng phân tích về biểu thức chính quy mảnh-by-piece:


/^ => khởi đầu của một dòng

\w+ => bất kỳ từ nào (chữ cái, số và dấu gạch dưới) lặp lại 1 hoặc nhiều lần

([\.-]?\w+)* => a nhóm của [một khoảng thời gian tùy chọn hoặc dấu gạch ngang (.) (-) tiếp theo là bất kỳ từ lặp đi lặp lại một hoặc nhiều lần] có thể được lặp đi lặp lại 0 hoặc nhiều lần

@\w+ => một tại biểu tượng (@) theo bởi bất kỳ từ lặp đi lặp lại một hoặc nhiều lần

([\.-]?\w+)* => a nhóm của [một khoảng thời gian tùy chọn hoặc dấu gạch ngang theo bất kỳ từ lặp đi lặp lại 1 hoặc nhiều lần] có thể được lặp đi lặp lại 0 hoặc nhiều lần

(\.\w{2,3})+ => a nhóm của [một khoảng thời gian tiếp theo bất kỳ từ nào có thể được lặp đi lặp lại 2-3 lần] có thể được lặp đi lặp lại 1 hoặc nhiều lần

$/ => cuối của một dòng


Bằng cách này, đây là một thực sự tốt Introduction to Regular Expressions sẵn trên Codular.

3

Hãy thử điều này

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

Nó làm việc cho tôi

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

chút vẻ đẹp này sẽ cho phép bạn nhập địa chỉ email một hoặc nhiều trong một chuỗi, kết thúc bằng một dấu phẩy hoặc dấu chấm phẩy, theo sau là một không gian tùy chọn. :)

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

Mã xác thực này là SAU cho địa chỉ email. Đặc biệt là không cho phép địa chỉ của form [email protected] Đây là lỗi phổ biến trên nhiều trang web thương mại (nhưng không phải stackoverflow - xin chúc mừng!).