2015-10-28 2 views
2

Я работаю над простой проверкой подлинности электронной почты. Но это не сработает.Проверка подлинности JQuery не работает

Любые идеи, почему это не работает? Я что-то делаю неправильно, или должен ли я структурировать свой код каким-то другим способом?

Я сделал функцию, как это:

function IsEmail(email) { 
    var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
    if(!regex.test(email)) { 
     return false; 
    } else { 
     return true; 
    } 
} 

и после того, что я называю эту функцию в моей setupRegistration функции.

My JS выглядит следующим образом:

function doOutputMessage(type, message){ 
    $("#outputMessage").html(""); 
    $("#outputMessage").removeClass(); 
    $("#outputMessage").hide(); 
    if(type == "error") { 
     $("#outputMessage").addClass("error").fadeIn("fast"); 
    } else if(type == "success") { 
     $("#outputMessage").addClass("success").fadeIn("fast"); 
    } 

    $("#outputMessage").text(message); 
    $("#outputMessage").show(); 
} 

function setupRegistration(){ 

    $("#signupWrapper").on("click", "#regUser", function(){ 
     var username = $("input[name='username']").val(); 
     var email = $("input[type='email']").val(); 
     var password = $("input[type='password']").val(); 

     if(username == ""){ 
      doOutputMessage("error", "Fill in your desired username!"); 
     } 

     if(email == ""){ 
      doOutputMessage("error", "Fill in your email!"); 
     } 

     if(IsEmail(email)==false){ 
      doOutputMessage("error", "mailen är fel förfan"); 
     } 

     if(password == ""){ 
      doOutputMessage("error", "Fill in your desired password!"); 
     } 

     if(username != "" && email != "" && password != ""){ 
      ajaxCall(username, email, password); 
     } 
    }); 
} 

function IsEmail(email) { 
    var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
    if(!regex.test(email)) { 
     return false; 
    }else{ 
     return true; 
    } 
} 


function ajaxCall(username, email, password){ 
    $.ajax({ 
     type: 'POST', 
     url: '../register.php', 
     data: { 
      'username' : username, 
      'email' : email, 
      'password' : password, 
     }, 
     success: function(data) { 
      if(data.exists){ 
       doOutputMessage("error","That Username is allready taken."); 
      } else if(data.inserted) { 
       doOutputMessage("success","You have successfully been registered!"); 
      }else { 
       doOutputMessage("error","Something went wrong, try again later."); 
      } 
     } 
    }); 
} 

$(document).ready(function(){ 
    setupRegistration(); 
}); 


function regSubmit(){ 

    clearErrorMessages(); 

    var username = $("#regForm #username").val(); 
    var email = $("#regForm #email").val(); 
    var password = $("#regForm #password").val(); 

    if(username == ""){ 
     showValidationMessage("#regForm #error_username", "Fill in your desired username!"); 
    } 

    if(email == ""){ 
     showValidationMessage("#regForm #error_email", "Fill in your email!"); 
    } 

    if(password == ""){ 
     showValidationMessage("#regForm #error_password", "Fill in your desired password!"); 
    } 

    if(username != "" && email != "" && password != ""){ 
     $.ajax({ 
      url: 'regLogin.code.php', 
      type: 'POST', 
      data: { 
        'action' : 'register', 
        'username' : username, 
        'email'  : email, 
        'password' : password 
        }, 
      success: function(data, status){ 
       console.log(data); 
       if(data == "exist"){ 
        showValidationMessage("#regForm #error_general", "A user with that username or password already exists!"); 
       }else if(data == "illegal"){ 
        showValidationMessage("#regForm #error_general", "Your username contains illegal characters!"); 
       } 
       else if(data == "true"){ 
        showValidationMessage("#regForm #success", "Success!"); 
        setTimeout(function(){ 
         window.location.replace("/admin/inside/"); 
        }, 1000); 
       } 
      }, 
      error: function(xhr, desc, err){ 
       showValidationMessage("#regForm #error_general", "Something went wrong, please try again"); 
      } 
     }); 
    } 
} 
+0

Попробуйте использовать 'if (! IsEmail (email)) {' вместо 'if (IsEmail (email) == false) {' –

+0

shouldendt регулярное выражение должно быть что-то вроде: /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/ –

+0

Сделайте другую форму валидации работают? – misantronic

ответ

1

@ Mario-Chueca является правильным. Ваш код работает в основном корректно, однако вы делаете вызов Ajax независимо от того, правильно ли оно написано, и в результате сообщение об ошибке не отображается. Вы должны только сделать вызов Ajax, когда указанный адрес электронной почты является действительным:

if(username != "" && email != "" && password != "" && IsEmail(email)){ 
    ajaxCall(username, email, password); 
} 

Я включил пример кода ниже, чтобы показать, что ваша электронная почта проверки (без Ajax вызова) работает. Я включил исправление if(!IsEmail(email){, предложенное @Abdulla, а также добавил более сложное регулярное выражение из этого post.

function IsEmail(email) { 
 
    //var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
 
    //More advanced regex to valid 99.99% of most emails in use, see https://stackoverflow.com/questions/46155/validate-email-address-in-javascript 
 
    var regex = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/; 
 
    if (!regex.test(email)) { 
 
    return false; 
 
    } else { 
 
    return true; 
 
    } 
 
} 
 

 
function doOutputMessage(type, message) { 
 
    $("#outputMessage").html(""); 
 
    $("#outputMessage").removeClass(); 
 
    $("#outputMessage").hide(); 
 
    if (type == "error") { 
 
    $("#outputMessage").addClass("error").fadeIn("fast"); 
 
    } else if (type == "success") { 
 
    $("#outputMessage").addClass("success").fadeIn("fast"); 
 
    } 
 

 
    $("#outputMessage").text(message); 
 
    $("#outputMessage").show(); 
 
} 
 

 

 
//if (IsEmail('[email protected]')) { 
 

 
// doOutputMessage('success', 'valid email') 
 
//} 
 

 

 

 
if (!IsEmail('john.doe#stackoverflow.com')) { 
 

 
    doOutputMessage('error', 'invalid email') 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="outputMessage">Test</div>

+0

Это сработало. Добавлено && IsEmail (электронная почта), поэтому ajaxCall werent сделал, даже если почта была неправильной. Спасибо всем за помощь. Im довольно новый для jquery, но он учится каждый день. Жесткая часть слишком структурирует код в хорошем состоянии. Мне кажется, что я просто помещаю свой код случайно и не имею никакой структуры. Но, может быть, я научусь делать это, как код? –

0

удалить false здесь

if(!IsEmail(email){ 

и regex должны быть

regex = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i; 

Live DEMO

How to Find or Validate an Email Address

+0

, и я протестировал вашу ссылку, есть ошибка в подтверждении формы входа в систему. исправить это тоже –

+0

Ive проверил ваше решение, но он, похоже, работает. Я что-то пропустил здесь. Live Demo: http://regform.jonasalvarson.se/ (сделать жесткое обновление, внесла некоторые изменения в код) –

+0

нет его работы. проверьте, правильно ли вы копируете контент. –

1

Используйте некоторые советы от прежде, но изменить это тоже ошибка не останавливает АЯКС вызов:

var error_email=false; 
if(!IsEmail(email)){ 
    error_email=true; 
    doOutputMessage("error", "mailen är fel förfan"); 
} 

if(password == ""){ 
    doOutputMessage("error", "Fill in your desired password!"); 
} 

if(username != "" && email != "" && password != "" && !error_email){ 
    ajaxCall(username, email, password); 
} 
+1

yeah ofc .. ajaxcall были сделаны в любом случае, исправлено это. Теперь его работа. СПАСИБО! –

0

пожалуйста, попробуйте:

function IsEmail(email){ 
    var reg = /^[a-zA-Z0-9\.\-\+]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/ 
    return reg.test(email) 
} 
Смежные вопросы