JavaScript RegEx.test()条件中止/提前返回函数

JavaScript RegEx.test()条件中止/提前返回函数,javascript,regex,forms,submit,Javascript,Regex,Forms,Submit,我有一个简单的类项目,我正在做一些表单验证。我们必须使用一些基本的正则表达式来验证输入。我在一个外部js文件中有这段代码 我有一个函数,它捕获onsubmit事件,并返回验证函数的值,即是否继续回发 问题是,当我调用RegEx.test()方法时,我的验证函数停止并返回,而回发在无意中进行。同样,如果我使用“new regex()”创建一个regex对象,同样的事情也会发生。我不知道为什么 这是我的密码: $(document).ready(function() { // onsubm

我有一个简单的类项目,我正在做一些表单验证。我们必须使用一些基本的正则表达式来验证输入。我在一个外部js文件中有这段代码

我有一个函数,它捕获onsubmit事件,并返回验证函数的值,即是否继续回发

问题是,当我调用RegEx.test()方法时,我的验证函数停止并返回,而回发在无意中进行。同样,如果我使用“new regex()”创建一个regex对象,同样的事情也会发生。我不知道为什么

这是我的密码:

$(document).ready(function() {

    // onsubmit event    
    $('form').submit(
        function() {
            return validation();
        }
        );

    // form validation
    function validation() {

        resetErrors();

        //variables
        var validates = true;
        var errorString = "";
        //var isEmail = new RegEx('^.+@.+\..+$'); // function stops here if line is uncommented and kicks off the postback?
        //alert("harro new regex?"); // does not run if above line is uncommented


        var isEmail = "/^.+@.+\..+$/"; // this doesn't stop the function
        alert("harro isEmail direct regex string assignment"); // runs

        var isZipCode = "/^(\d{5}$)|(^\d{5}-\d{4}$)/"; // this doesn't stop the function
        alert("harro isZipCode direct regex string assignment"); // runs

        //firstname
        if (!$('#firstName').val().trim()) {
            validates = false;
            $('#firstName').addClass('error');
            errorString += "First Name is blank. <br />";
        }
        //lastname
        if (!$('#lastName').val().trim()) {
            validates = false;
            $('#lastName').addClass('error');
            errorString += "Last Name is blank. <br />";
        }
        //email
        if (!$('#email').val().trim()) {
            validates = false;
            errorString += "Email is blank. <br />";
            $('#email').addClass('error');
        }
        // if this runs the test, the function stops here
        else if (!isEmail.test(email.value)) {
            validates = false;
            errorString += "Please enter a valid email address. <br />";
            $('#email').addClass('error');
        }
        alert("harro rest of function after email test?")// does not run if "else if" is ran

        //address
        if (!$('#address').val().trim()) {
            validates = false;
            $('#address').addClass('error');
            errorString += "Address is blank. <br />";
        }

        //zipcode
        if (!$('#zipCode').val().trim()) {
            validates = false;
            $('#zipCode').addClass('error');
            errorString += "Zipcode is blank. <br />";
        }
        // if this runs the test, the function stops here
        else if (!isZipCode.test(zipCode.value)) {
            validates = false;
            $('#zipCode').addClass('error');
            errorString += "Please enter a valide zip code. <br />";
        }
        alert("harro rest of function after zipcide test?")// does not run if "else if" is ran


        if (validates) {
            return true;
        }

        //output error messages
        $('#pageTitle').after("<p id='errorText'>" + errorString + "</p>");

        return false;
    }

    //reset validation errors
    function resetErrors() {

        $('#errorText').remove();
        $('#firstName').removeClass('error');
        $('#lastName').removeClass('error');
        $('#email').removeClass('error');
        $('#address').removeClass('error');
        $('#zipCode').removeClass('error');

    }

});
$(文档).ready(函数(){
//提交事件
$('form')。提交(
函数(){
返回验证();
}
);
//表单验证
函数验证(){
重置错误();
//变数
var验证=真;
var errorString=“”;
//var isEmail=new RegEx('^.+@.+\..+$);//如果行未注释并开始回发,函数将在此处停止?
//警报(“harro new regex?”);//如果上面的行未注释,则不会运行
var isEmail=“//^.+@.+\..+$/”;//这不会停止函数
警报(“harro isEmail直接正则表达式字符串分配”);//运行
var isZipCode=“/^(\d{5}$)|(^\d{5}-\d{4}$)/”;//这不会停止函数
警报(“harro isZipCode直接正则表达式字符串分配”);//运行
//名字
if(!$('#firstName').val().trim()){
验证=假;
$('#firstName').addClass('error');
errorString+=“名字为空。
”; } //姓氏 if(!$('#lastName').val().trim()){ 验证=假; $('#lastName').addClass('error'); errorString+=“姓氏为空。
”; } //电子邮件 如果(!$('#email').val().trim()){ 验证=假; errorString+=“电子邮件为空。
”; $('#email').addClass('error'); } //如果这运行测试,函数将在此停止 否则如果(!isEmail.test(email.value)){ 验证=假; errorString+=“请输入有效的电子邮件地址。
”; $('#email').addClass('error'); } 警报(“在电子邮件测试后对函数的其余部分进行harro?”)//如果运行了“else if”,则不会运行 //地址 if(!$('#address').val().trim()){ 验证=假; $('地址').addClass('错误'); errorString+=“地址为空。
”; } //zipcode if(!$('#zipCode').val().trim()){ 验证=假; $('#zipCode').addClass('error'); errorString+=“Zipcode为空。
”; } //如果这运行测试,函数将在此停止 如果(!isZipCode.test(zipCode.value))为else{ 验证=假; $('#zipCode').addClass('error'); errorString+=“请输入有效的邮政编码。
”; } 警报(“在zipcide测试后harro函数的其余部分?”)//如果运行“else if”,则不会运行 如果(验证){ 返回true; } //输出错误消息 $(“#pageTitle”)。在(“

”+errorString+”

”)之后; 返回false; } //重置验证错误 函数resetErrors(){ $('#errorText')。删除(); $('#firstName').removeClass('error'); $('#lastName').removeClass('error'); $('#email').removeClass('error'); $(“#地址”).removeClass('error'); $('#zipCode').removeClass('error'); } });
您可以检查JavaScript控制台以查看错误消息。这些可能会导致您使用RegExp而不是RegEx

您缺少一个“p”,它是RegExp而不是RegEx

var isEmail = new RegExp('^.+@.+\..+$');

但是一般来说,只要打开Firebug或Chrome开发者工具(windows中的F12),您就会看到错误的原因。如果您在控制台中编写new Regex(),它将告诉您Regex未定义,如果您开始编写RegE…,它将为您自动完成RegExp。

感谢您的帮助。使用拼写正确的RegExp可以使测试工作,而不是中止!所以我可以这样分配regexp变量。然而,我很好奇为什么我不能仅仅通过分配regexp字符串来创建regexp变量。我看过一些教程是这样做的。当我这样做的时候,它仍然会在测试中中止。你说的“只给它赋值正则表达式字符串”是什么意思?在JavaScript中,可以通过两种方式创建正则表达式对象:使用正则表达式文本
/.*/
RegExp
构造函数
新建正则表达式('.')