2013-02-22 2 views
7

Я новичок в JavaScript и нашел этот код JavaScript в Интернете, который не проверяет данную электронную почту (не проблема с кодом) -понимание проверки электронной почты с помощью 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> 

У меня нет никаких проблем с кодом, но Я почему-то не понял, что означает регулярное выражение /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/. Я не понимаю, что означает каждая часть регулярного выражения. Пожалуйста, просветите меня.

+0

Вы считаете, что это сбивает с толку ... попробуйте следующее: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html. Проверка электронной почты с регулярным выражением сложна ... см. Http://programmers.stackexchange.com/questions/78353/how-far-should-one-take-e-mail-address-validation –

ответ

13
  1. Эти две косые черты /.../ содержат regexe.

  2. Ведущие и конечные $ соответствуют началу и концу строки ввода, соответственно. То есть вся входная строка должна соответствовать этому регулярному выражению, а не части входной строки.

  3. \ w + соответствует 1 или более символам слов (a-z, A-Z, 0-9 и подчеркивание).

  4. [.-] соответствует символу. или -. Нам нужно использовать. представлять . в виде . имеет особое значение в regexe. \ Известен как escape-код, который восстанавливает исходное значение буква следующего символа.

  5. [.-]? соответствует 0 или 1 вхождения [.-].

  6. Опять же, \ w + соответствует 1 или более символам слов.

  7. ([.-]? \ W +) * соответствует 0 или более вхождений [.-]? \ W +.

  8. Подменю \ w + ([.-]? \ W +) * используется для сопоставления имени пользователя в письме, перед знаком @. Он начинается с по крайней мере одного символа слова (a-z, A-Z, 0-9 и подчеркивания), за которым следуют другие символы слова или. или -. Однако a. или - должен следовать символом слова (a-z, A-Z, 0-9 и подчеркиванием). То есть строка не может содержать «..», «-», «.-» или «-.». Пример допустимой строки: «a.1-2-3».

  9. @ соответствует самому себе.

  10. Опять же, подменю \ w + ([.-]? \ W +) * используется для соответствия доменному имени электронной почты с тем же шаблоном, что и имя пользователя, описанное выше.

  11. Подвыражение. \ W {2,3} соответствует a. а затем два или три слова, например «.com», «.edu», «.us», «.uk», «.co».

  12. (. \ W {2,3}) + указывает, что вышеуказанное подвыражение должно происходить один или несколько раз, например, ".com", ".co.uk", ".edu.sg" и т.п.

Reference

+0

В 8. это часть не совсем верна - «Тем не менее, a. или - должен следовать символом слова» - потому что вы можете иметь адрес электронной почты, где - за ним следует @ - например, как this [email protected] – Wojtek

3

Дайте попробовать здесь REGEX

вы можете найти подробное объяснение.

3

Вот ломаются регулярного выражения сдельная по-части:


/^ => начало строки

\w+ => любое слово (буквы, цифры и символы подчеркивания), повторяющиеся 1 или более раз

([\.-]?\w+)* => а группа из [необязательный период или тире (.) (-), а затем любое слово повтор ют один или несколько раз], которые могут быть повторены 0 или более раз

@\w+ => на символ (@) следовать за любым словом повторяют один или несколько раз

([\.-]?\w+)* => а группа из [необязательный период или тире с последующим любое слово повторяется 1 или более раз], которые могут быть повторены 0 или более раз

(\.\w{2,3})+ => а группа из [периода следует любое слово, которое может быть повторен 2-3 раз], что может повторяться 1 или более раз

$/ => конец строки


Кстати, вот действительно хорошо Introduction to Regular Expressions доступны на Codular.

3

Попробуйте

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

Он работал для меня

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

эта маленькая красота позволит вам ввести один или несколько адресов электронной почты в строке, заканчивая запятой или точкой с запятой, за которым следует дополнительное пространство. :)

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

Этот код проверки НЕПРАВИЛЬНО для адресов электронной почты. В частности, это не разрешает адреса формы [email protected] Это широко распространенная ошибка, обнаруженная на многих коммерческих сайтах (но не stackoverflow - поздравления!).

Смежные вопросы