2012-06-25 2 views
0

Я пытаюсь проверить электронную почту с помощью javascript, но по какой-то причине она не работает.
ПРОБЛЕМА: Когда я вхожу ДЕЙСТВИТЕЛЬНЫЙ адрес электронной почты он по-прежнему предупреждает, что это мой адрес неисправна ...
Что я здесь отсутствует? Вот код:Регулярные выражения Javascript не работают должным образом

$(document).ready(function(){ 

    $('.info').hide(); 
    $('#button').click(function(){ 

    var name = encodeURIComponent($('#name').val()); 
    var email = encodeURIComponent($('#email').val()); 
    var message = encodeURIComponent($('#message').val()); 
    var reg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 



    //if name is empty 
    if($('#name').val() == 0){ 

    $('.info').html('<p style="font-weight:bold;text-align:center;font-size:20px;"> Molimo unesite Vaše ime!</p>').fadeIn(1000); 
    } 
    //if name is less than three characters 
    else if(name.length < 3){ 
    $('.info').html('<p style="font-weight:bold;text-align:center;font-size:20px;"> Molimo unesite ime duže od tri slova!</p>').fadeIn(1000); 

    } 
    // if email is empty 
    if ($('#email').val() == 0){ 
    $('.info').html('<p style="font-weight:bold;text-align:center;font-size:20px;"> Molimo unesite Email!</p>').fadeIn(1000); 

    } 
    // if email AND name are empty 
    if($('#email').val() == 0 && $('#name').val() == 0){ 
    $('.info').html('<p style="font-weight:bold;text-align:center;font-size:20px;"> Molimo unesite Email!<br/>Molimo unesite ime!</p>').fadeIn(1000); 

    } 
    //if mail adress is NOT valid 
    if(reg.test(email)==false){ 
    //alert('please enter valid mail!'); 
    $('.info').html('<p style="font-weight:bold;text-align:center;font-size:20px;">Molimo unesite ispravan Mail!</p>').fadeIn(1000); 
    } 

      //if mail adress IS VALID (this is not working...) 
    if($('#name')!= '' && reg.test(email) !=false){ 

      //alert(data); 
    var data = 'name=' + name + '&email=' + email + '&message=' + message; 

      $.ajax({ 
      type:"POST", 
      url:'kontakt2.php', 
      cache:'false',//IE FIX 
      data: data, 

      success: function(){ 
      //alert('THX for your mail!'); 
      } //end sucess 
      }); 
      } //end if statment for VALID mail 
      //return false prevent Redirection 
      return false; 
      }); 


      }); 
+1

Так намного проще использовать предварительно упакованное, проверенное решение: http://www.position-absolute.com/articles/jquery-form-validator-because-form -validation-is-a-mess/ – bpeterson76

+2

Ваше регулярное выражение слишком простое. Посмотрите на это сообщение комментарии там: http://stackoverflow.com/questions/201323/how-to-use-a-regular-expression-to-validate-an-email-addresses – Michael

+0

Что действительный e-mail адрес, с которым он не работает? Конечно, есть много действительных адресов электронной почты, которые, вероятно, потерпят неудачу. Адреса электронной почты, как известно, трудно полностью проверить, поэтому вы можете просто сделать некоторые базовые биты типа «есть ли @, есть ли в доменной части» и выполнять более надежные проверки, если необходимо, на стороне сервера (т. Е. Пытаться на самом деле отправлять почту на этот адрес). – Chris

ответ

2

линия

if($('#name')!= '' && reg.test(email) !=false) 

, вероятно, следует

if($('#name').val()!= '' && reg.test(email) !=false) 

(или просто if (name != '' && reg.test(email) != false))

+0

Я бы также удалил явное сравнение с булевой константой. Это должен быть просто 'reg.test (email)', потому что он уже возвращает логическое значение. – Pointy

0

в этом заявлении, вы проверяете, чтобы увидеть если входное значение равно 0. Это не способ проверить пустое поле:

if ($('#name').val() == 0) 

немного лучше было бы:

if (!$('#name').val()) 
0

мне удалось решить эту проблему, изменив этот код:

if($('#name').val()!= '' && reg.test(email) !=false) 

в этом:

if(reg.test($('#email').val()) && $('#name').val()!='') 

I я уверен, что код выше рег. Тест (электронная почта) часть не работал, поэтому encodeURIComponent. Thx Rodolfo и Pointy для ваших ответов :)

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