Javascript 使用node和Express进行服务器端电子邮件验证

Javascript 使用node和Express进行服务器端电子邮件验证,javascript,jquery,ajax,node.js,validation,Javascript,Jquery,Ajax,Node.js,Validation,我正在开发一个web应用程序,我想使用javascript在服务器端进行电子邮件验证,但我对如何构造文档以及如何使其正常工作感到有点困惑 我使用的是node/Express,我的模板使用的是Jade。我希望我的用户登录页面将在用户单击开箱即用(使用AJAX调用)时立即验证电子邮件。我有一个名为lib的文件夹,其中有一个validation.js文件,我打算在其中保存所有验证代码 我还有一个navigation.js文件,我在其中使用所有AJAX调用 validation.js function

我正在开发一个web应用程序,我想使用javascript在服务器端进行电子邮件验证,但我对如何构造文档以及如何使其正常工作感到有点困惑

我使用的是node/Express,我的模板使用的是Jade。我希望我的用户登录页面将在用户单击开箱即用(使用AJAX调用)时立即验证电子邮件。我有一个名为lib的文件夹,其中有一个validation.js文件,我打算在其中保存所有验证代码

我还有一个navigation.js文件,我在其中使用所有AJAX调用

validation.js

function checkEmail(userEmail) {

    var email = userEmail
    var emailFilter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

    if (!emailFilter.test(email.value)) {
    //alert('Please provide a valid email address');
    email.focus;
    return false;
 }
 function checkPassword(userPassword){
    var password = userPassword; 
    var passwordFilter = /^[a-zA-Z0-9!@#$%^&*]{6,16}$/

    if (!passwordFilter.test(password.value)){
        password.focus; 
        return false;
    }
 }
navigation.js

$(document).ready(function() {

    console.log("DOCUMENT IS READY!");

    var viewsWrapper = $("#views-wrapper");
    var loginButton = $("#login-button");
    var registerButton = $("#register-button");

    // Login Link
    // TODO: Unclear if needed
    $("ul li.login").click(function() {
        $.get('/login', function(data) {
            viewsWrapper.html(data);
        });
    });


    // Login Button
    loginButton.click(function(e) {


        // TODO: Input validation needed


        var loginData = { username: $("#username").val(), password: $("#password").val() };

        $( "#username" ).blur(function() {
            if (!checkEmail(username)){
                alert( "Handler for .blur() called." );
            } 
        });
        $( "#username" ).blur(function() {
            if (!checkPassword(password)){
                alert( "Handler for .blur() called." );
            } 
        });

        e.preventDefault();
        $.post('/login', loginData, function(data) {
            $('body').html(data);
        });
    });

..... (Still code after this but not relevant)
我编辑了我的代码,以便使用下面的一些注释。它仍然不工作,因为我没有收到警报消息。当我打电话时,它必须这样做:

        if (!checkPassword(username)){
            alert( "Handler for .blur() called." );
        } 
当我这样做的时候,我实际上是在传递用户名,还是应该以某种方式使用loginData


谢谢你的帮助

如果这是HTML5页面,您可以利用内置的电子邮件验证。不幸的是,这与您指定的正则表达式不同,但编写电子邮件正则表达式比最初看起来要困难

我还建议,既然您已经用javascript编写了验证,那么您可以在网页本身上应用相同的javascript验证。这将为您节省可能导致延迟的ajax调用


关于如何在单击out时应用验证,可以使用blur事件,jQuery提供了一种方便的方法

用户单击电子邮件输入框后,可以使用jQuery focusout或blur事件检查电子邮件:

$('#txtEmail').focusout(function(){
    checkEmail();
});

我对我的问题和上述方法做了一些修改。当我运行代码时,我没有收到警报,我应该引用loginData吗?我还更改了validation.js,以便这些方法接受用户名和密码参数。密码的值可能未定义。此外,在click事件处理程序中使用$(“#username”).blur也没有意义。这些是独立的事件:模糊;onclick。看起来你有2个模糊事件处理程序,你可以组合