使用SSN正则表达式进行Jquery验证,屏蔽输入和取决于

时间:2011-10-07 15:36:56

标签: javascript jquery regex jquery-validate mask

我无法使用Jquery验证来处理以下规则。

我有使用SSN格式屏蔽的字段,验证不允许在没有完整SSN的情况下提交此信息。我有一个工作的正则表达式功能,拒绝非SSN。我需要它也不允许空白提交(仅当字段为onFocus时才应用蒙版)。最后但并非最不重要的是,如果选中另一个复选框(#noSSN),则不需要该字段。

我添加了一个JSfiddle页面来帮助:http://jsfiddle.net/B2UpW/3/

在小提琴页面上似乎有点不同。希望这有帮助!

编辑:我还没有收到任何回复..好奇如果对我的问题有任何疑惑?欢迎任何有助于寻求帮助的建议!

$("#ssn").mask("999-99-9999");

$.validator.addMethod("notEqual", function(value, element, param) {
  return this.optional(element) || value !== param;
}, "Please choose a value!");           

$("#applicantForm").validate({
    rules: {        
        ssn: {
            notEqual: "___-__-____", 
            required: {
                depends: function(element) {
                    return ($("#ssn").val() == ""
                            || isValidSSN($("#ssn").val()) 
                            || $("#noSSN:unchecked"));
                }                   
            }                   

        }
    },
    messages: {
        ssn: 'Please enter a social security number.'
    }
});


function isValidSSN(value) { 
    var re = /^([0-6]\d{2}|7[0-6]\d|77[0-2])([ \-]?)(\d{2})\2(\d{4})$/; 
    if (!re.test(value)) { return false; } 
    var temp = value; 
    if (value.indexOf("-") != -1) { temp = (value.split("-")).join(""); } 
    if (value.indexOf(" ") != -1) { temp = (value.split(" ")).join(""); } 
    if (temp.substring(0, 3) == "000") { return false; } 
    if (temp.substring(3, 5) == "00") { return false; } 
    if (temp.substring(5, 9) == "0000") { return false; } 
    return true; 
}

3 个答案:

答案 0 :(得分:3)

网站所有者,请停止使用jammypeach或Stephen S.上面的代码。一些有效的SSN被正则表达式拒绝。

请参阅http://www.socialsecurity.gov/employer/randomization.html

  

之前未分配的区号是为了分配而引入的

SSN可以从2011年6月开始以“773”及以上开始,然后创建该线程。

请将([0-6]\d{2}|7[0-6]\d|77[0-2])替换为\d{3} - 现在我必须亲自去银行; - )

答案 1 :(得分:2)

你只需要添加一个检查,看看复选框是否,呃,检查。

请参阅第9行(或下面代码第2行)中的this updated fiddle,检查SSN是否有效:

$('#submitApplication').live('click', function() {
    if ($('#noneSSN').is(':checked'))
    {
        alert("SUCCESS");
    }
    else
    {
        var isValid = $("#applicantForm").valid();
        if (isValid) {
            alert("SUCCESS");
        }
    }
    return false;
});

如果选中该框,它将允许提交,否则它将要求正确的SSN。

答案 2 :(得分:0)

目前尚不清楚什么不能正常工作......

我还是看到了一些事情:

  1. 什么是notEqual?这是你添加的方法吗?在additionnal methods script中提供了一个名为pattern的方法以及插件。

  2. depends的目的是什么?添加规则required以检查值是否为空,并添加isValidSSN: true之类的规则来执行您自己的SSN验证。

  3. 仅在未选中复选框时才使用depends(或required: function(element) { return $("#noSSN").is(":unchecked"); })来应用规则。

  4. 希望这有帮助,d。