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

nem*_*oth 4 regex jquery 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."
            }
        }
    });

}); 
Run Code Online (Sandbox Code Playgroud)

我不是javascript或正则表达式的专家,但我认为这"应该"有效.任何指针都将非常感激.

Ja͢*_*͢ck 7

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

regex: "\\d{6}\\-\\d{2}\\-\\d{4}"
Run Code Online (Sandbox Code Playgroud)

我还建议添加锚点:

regex: "^\\d{6}\\-\\d{2}\\-\\d{4}$"
Run Code Online (Sandbox Code Playgroud)

这样您就会认为"1234567-12-12345"无效.

更新

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

regex: /^\d{6}-\d{2}-\d{4}$/
Run Code Online (Sandbox Code Playgroud)

  • 或者我想如果你杀掉引号并且只是在表达式周围放置起始和结束字符而不转义..`正则表达式:/ ^\d {6}\ - \d {2}\ - \d {4} $ /` (2认同)