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

时间:2014-04-25 07:15:57

标签: jquery regex jquery-validate

我认为这是检查马来西亚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或正则表达式的专家,但我认为这应该“有用”。任何指针都将非常感激。

3 个答案:

答案 0 :(得分:6)

你必须转义将传递给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}$/

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

这是我能找到的最严格的IC正则表达式。

此正则表达式将确保IC的出生日期,日期,月份,年份不正确。