首页 > 解决方案 > 表单验证的完整性检查。当我的正则表达式应该这样做时不接受有效日期

问题描述

这里我有一个 Javascript 函数,当调用它时,它会在 ASP 表单中查找三个特定字段并检查每个字段是否正确填写。我的意图是在单独的 asp 提交按钮发送表单之前编写更多代码来处理数据,但我认为 asp 的东西与问题/问题无关。

    function generateRef() {


var recieptno = document.getElementById("test_txt_Recno").value;
var dop = document.getElementById("test_txt_Date").value;
var branchno = document.getElementById("test_txt_Branchno").value;

if (typeof recieptno === undefined || recieptno =="" )  {
    alert('Missing Reciept Number');
                                                            }
else {
        if (typeof dop === undefined || dop =="" ) {
            alert('Missing Date of Purchase');
                                                            }
        else {
                if (typeof branchno  === undefined || branchno =="" )   {
                        alert('Missing Branch Number');
                                                                            }
                else {
                        // all is good, carry on.
                        // check for valid  reciept no
                        var pattern = new RegExp("^[0-2]([0-9]{5})$");

                        if ( pattern.test(recieptno)) {
                            // check for valid  branch no
                            var pattern2 = new RegExp("^([0-9]{4})$");

                            if ( pattern2.test(branchno)) {
                                // check for valid  dop
                                var pattern3 = new RegExp("^\d{2}[\/]\d{2}[\/]\d{4}$");

                                alert(dop);
                                if ( pattern3.test(dop)) {
                                    alert('OK');
                                    // more code will go here for the next steps
                                                                    }
                                else {
                                    alert('Invalid Date of Purchase. The date must be in DD/MM/YYYY format.');
                                        }
                                                                        }
                            else {
                                alert('Invalid Branch Number');
                                    }
                                                                    }
                        else {
                            alert('Invalid Reciept Number');
                                }

                        }
                }
        }

}

注意:上面代码中当前的正则表达式只是一个糟糕的日期检查,它只是因为我有一个更好的,但想确保正则表达式不是一个简单的问题。

我尝试以例如 02/02/2020 的形式输入日期,并且警报吐出这个日期就好了,看起来应该可以工作,但是代码的逻辑仍然使它打印出警报,上面写着日期格式错误,无法在我想继续我的代码的地方出现“确定”警报。其他两项检查似乎正在工作,日期一项位于其中,并且它们在我看来格式相同。

在这一点上,我只需要一个健全性检查来发现我的错误。我不明白为什么它不起作用。

标签: javascript

解决方案


如果使用带有字符串文字的 RegExp 构造函数,请记住反斜杠是字符串文字中的转义,因此要在正则表达式中使用它,您需要在字符串文字级别对其进行转义。/a\*b/new RegExp("a\\*b")创建相同的表达式,搜索“a”,后跟文字“*”,后跟“b”。

如果您想使用 RegExp 构造函数而不是/^\d{2}[\/]\d{2}[\/]\d{4}$/,则需要转义反斜杠:new RegExp("^\\d{2}[\\/]\\d{2}[\\/]\\d{4}$")


推荐阅读