Jquery 验证规则是否可以根据条件更改

Can the rules of Jquery validation be changed on condition

是否可以更改 jquery 验证规则。

问题是 SSN,一个有效的 9 位代码正在被重新格式化以包含连字符,然后使其成为 11 个字符并且无法通过最大长度验证,即使它绝对是我 wanted.If,我没有maxlength的验证,用户可以输入超过9位数字并且不会发生格式化。

我有点面临 catch 22 的情况我 think.Its 与 cntact 号码相同,它是 10 位数字,但是格式有连字符和括号然后变成 13 characters.This 绝对是 fine.The 要求类似于 that.But 格式化后验证失败,表单未提交。

如果我可以更改规则或者你们有更好的解决方案,请告诉我。

代码:

  $("#ProviderDetailsForm").validate({     
    onfocusout: function(element, event) {
        this.element(element);
    },
    rules:
        {
            SSN: { required: true, minlength :9,maxlength: 9, digits: true },   
            ContactNumber: { required: true, minlength: 10,maxlength:10, digits: true },    
        },
    messages: {
        SSN: {
            required  : "Please enter your SSN",
            minlength : "Invalid SSN(9 Digits atleast)",
            maxlength : "Invalid SSN(9 Digits only)"
        },

        ContactNumber: {
            required : "Please enter your Contact Number",
            minlength: "Enter a 10 digit contact number",
            maxlength: "Enter a 10 digit contact number"
        },    
    }

}); 

HTML:

   <body>
  <div class="container">
    <form class="form-horizontal" role="form" id="ProviderDetailsForm" method="post">
        <div class="form-group">
            <label class="col-sm-2 control-label labelfont">SSN:</label>
            <div class="col-sm-6">
                <input type="text" class="form-control" placeholder="Enter the SSN" id="SSN" name="SSN" data-bind="value: SSN" onkeypress="return onlyNumbers(event);" maxlength="11" />
            </div>
            <label class="col-sm-4 labelfont errorMsg" id="Err_SSN">Enter the SSN</label>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label labelfont">CONTACT NUMBER:</label>
            <div class="col-sm-6">
                <input type="text" class="form-control" data-bind="value: ContactNumber" name="ContactNumber" placeholder="Enter the Contact Number" id="ContactNumber" onkeypress="return onlyNumbers(event);" maxlength="13" />
            </div>
            <label class="col-sm-4 labelfont errorMsg" id="Err_ContactNum">Enter the Contact Number</label>
        </div>
        <div class="form-group">
            <button type="submit" id="Submit" class="btn btn-primary col-sm-1 col-sm-offset-4">Submit</button>
            <button type="reset" id="Reset" class="btn btn-primary col-sm-1">Reset</button>
        </div>
    </form>
</div>

我已附上 fiddle 我面临的问题。

http://jsfiddle.net/dcz31arf/6/ ... Tab out 进行格式化。

我确实在 tab out 上尝试了以下代码。

    $("#SSN").rules("remove", { maxlength:9 });
    $("#SSN").rules("add", { maxlength: 11 });

这没有用。

只有在添加连字符时,您的验证器才能包含数字。如果你只是想 erm,屏蔽输入,只需使用 jQuery 输入屏蔽插件。例如,社交的 this plugin 将如下所示:

<input data-inputmask="'mask': '999-99-9999'" />

掩码将确保适当的长度和格式。您当然需要更改规则中的长度验证器。

否则您可能需要创建一个 custom (regex) validator method.