为什么这个正则表达式返回false?

时间:2018-02-24 10:04:06

标签: javascript jquery

我的英格兰很差,对不起。 我会尽我所能。

我尝试使用正则表达式

制作SignUpForm

问题是当我使用正则表达式

处理if语句时

结果首先是真的,但在那之后,变为假。我想

下面是我的代码(javascript)

$(document).ready(function () {


    var idCheck = /^[a-z]+[a-z0-9]{5,19}$/g; // more than 6 words
    var pwCheck = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/; // more than 8 words including at least one number
    var emCheck = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/; // valid email check

    var signupConfirm = $('#signupConfirm'),
        id = $('#id'),
        pw = $('#pw'),
        repw = $('#repw'),
        email =$('#email');

    signupConfirm.click(function () {
        if(id.val() === '' || pw.val() === '' || email.val() === ''){
            $('#signupForm').html('Fill the all blanks');
            return false;
        } else {
            if (idCheck.test(id.val()) !== true) {
                $('#signupForm').html('ID has to be more than 6 words');
                id.focus();
                return false;
            } else if (pwCheck.test(pw.val()) !== true) {
                $('#signupForm').html('The passwords has to be more than 8 words including at least one number');
                pw.focus();
                return false;
            } else if (repw !== pw) {
                $('#signupForm').html('The passwords are not the same.');
                pw.empty();
                repw.empty();
                pw.focus();
                return false;
            }
            if (emCheck.test(email.val()) !== true) {
                $('#signupForm').html('Fill a valid email');
                email.focus();
                return false;
            }
        }
    })

});
在ID输入中输入6个字后,焦点已移至密码输入,因为条件已满足。 但是在我再次单击注册按钮后,即使ID输入填充了6个字

,焦点也会向后移动ID输入

我已经多次更改正则表达式了。但仍然喜欢这个。

有什么提示我可以解决这个问题吗? 我希望有人可以帮助我。

谢谢。祝你有美好的一天

2 个答案:

答案 0 :(得分:0)

请勿在正则表达式上使用global标记。你的代码应该是:

var idCheck = /^[a-z]+[a-z0-9]{5,19}$/;

当您与/g标志匹配时,您的正则表达式将在调用之间保存状态,因此所有后续匹配也将包括先前的输入。

答案 1 :(得分:0)

使用

var date = new Date(val);

删除 g 标志 并修改行

var idCheck = /^[a-z]+[a-z0-9]{5,19}$/