马来西亚身份证(IC)正则表达式- jQuery

vulvrdjw  于 5个月前  发布在  jQuery
关注(0)|答案(4)|浏览(67)

我有一个我认为是正确的正则表达式来检查马来西亚IC卡:
\d{6}-\d{2}-\d{4}(即xxxxxx-xx-xxxx的数字,其中x是0-9之间的数字)
然而,当我将它插入到jQuery中进行验证时,它从不允许它提交表单,尽管它是以正确的格式编写的。
下面是我的代码:

<script type="text/javascript"> 

$.validator.setDefaults({
    submitHandler: function(form) {
        form.submit();
    }
});

$.validator.addMethod("regex", function (value, element, regexp) 
{
    var check = false;
    var re = new RegExp(regexp);
    return this.optional(element) || re.test(value);
}, "Please enter a valid ic number");

$(document).ready(function () {

    // validate signup form on keyup and submit
    $("#commentForm").validate({
        rules: {
            ic_no: {
                required: true,
                regex: "\d{6}\-\d{2}\-\d{4}"
            }
        },
        messages: {
            ic_no: {
                required: "Please input the IC number before searching.",
                regex: "Please enter a valid ic number."
            }
        }
    });

});

字符串
我不是JavaScript或正则表达式的Maven,但我认为这“应该”工作。任何指针将非常感谢。

ilmyapht

ilmyapht1#

你必须转义将要传递给RegExp构造函数的字符串中的反斜杠:

regex: "\\d{6}\\-\\d{2}\\-\\d{4}"

字符串
我也建议在上面添加锚点:

regex: "^\\d{6}\\-\\d{2}\\-\\d{4}$"


这样您将认为“1234567-12-12345”无效。

更新

或者,您可以使用文字表达式传递RegExp对象:

regex: /^\d{6}-\d{2}-\d{4}$/

0yg35tkg

0yg35tkg2#

我们可以使用下面的正则表达式来检查他们可以插入的数字,而不是检查数字的长度。这不是更好吗?

(([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01]))-([0-9]{2})-([0-9]{4})

字符串

7xllpg7q

7xllpg7q3#

第一个月
这是我能找到的最严格的IC正则表达式。
这个正则表达式将确保IC的出生日期、月份和年份不正确。
这个解决方案真的很好。但是,我想补充一下它不能做的事情:
1.确定这个月有多少天。
例如:如果月份是11(11月)和第31天,它将返回true,我们知道11月不可能有第31天。
1.确定闰年2月,因为它的一天将是28或29时,在闰年。
https://www.regextester.com/上测试这个正则表达式,复制答案并粘贴到正则表达式输入中。

thtygnil

thtygnil4#

^((([02468][048]|[13579][26])(02)(29))|((\d{2})((0[1-9]|1[0-2])(0[1-9]|1\d|2[0-8])|(0[1|3-9]|1[0-2])(29|30)|(0[13578]|1[02])(31))))\-(\d{2})\-(\d{4})$

字符串
这是我计算出的最严格的IC正则表达式,它可以识别yymmdd是否正确,例如010229-XX-XX不正确,因为非闰年没有2月29日。

更新

使用Assert缩短

^((\d{2}(?!0229))|([02468][048]|[13579][26])(?=0229))(0[1-9]|1[0-2])(0[1-9]|[12]\d|(?<!02)30|(?<!02|4|6|9|11)31)\-(\d{2})\-(\d{4})$

相关问题