jQuery 使用两个冲突范围验证范围长度
jQuery Validate rangelength with two colliding ranges
格式 A:01234567890123456
(17 个字符)
格式 B:01234567890123456789012
(23 个字符)
在我的场景中,17 和 23 都被接受,既不多于,也不在两者之间。
所以,
- 2 个字符不正确
- 16 个字符不正确
- 17 个字符 正确
- 18 个字符不正确
- 21 个字符不正确
- 23 个字符 正确
- 23+ 个字符不正确
典型的rangelength
method不符合这种条件。
$( "#myform" ).validate({
rules: {
national_id: {
required: true,
rangelength: [17, 23]
}
}
});
因为它可以接受 18/19/20/21/22 是正确的 - 这应该是错误的。
如何使用 jQuery Validation 插件实现这种 rangelength
验证?
PS:我知道我可以做一些像 this one 这样简单的事情,但是我们可以使用 jQuery 验证来做这样的事情吗?
您必须使用 the .addMethod()
method 创建您自己的自定义规则。
jQuery.validator.addMethod("exactlengths", function(value, element, params) {
return this.optional(element) || (value.length == params[0] || value.length == params[1]);
}, jQuery.validator.format("Please only enter {0} or {1} characters"));
声明:
$( "#myform" ).validate({
rules: {
national_id: {
required: true,
exactlengths: [17, 23] ....
我在 additional.js 中添加了一个方法,它将验证一个范围并允许特定的数字:
$.validator.addMethod(
"ranges_and_single",
function(value, element, ranges) {
var allowMeToo = false;
var valid = false;
console.log(this.optional(element));
for(var i=0; i<ranges.length; i++) {
if(ranges[i].length == 1) {
if(value == ranges[i][0])
{
allowMeToo = true;
}
}
if(allowMeToo)
{
valid = true;
break;
}
else if(value >= ranges[i][0] && (value <= ranges[i][1] || allowMeToo )) {
valid = true;
break;
}
}
return this.optional(element) || valid;
},
"Please enter the value in the ranges or perticular number"
);
例如
$( "#myform" ).validate({
rules: {
fieldName: {
ranges_and_single:[ [2, 5], [7], [10, 15], [17], [25] ],
//It will allow 2, 3, 4, 5 7, 10, 11, 12, 13, 14, 15, 17 and 25
}
}
});
格式 A:01234567890123456
(17 个字符)
格式 B:01234567890123456789012
(23 个字符)
在我的场景中,17 和 23 都被接受,既不多于,也不在两者之间。
所以,
- 2 个字符不正确
- 16 个字符不正确
- 17 个字符 正确
- 18 个字符不正确
- 21 个字符不正确
- 23 个字符 正确
- 23+ 个字符不正确
典型的rangelength
method不符合这种条件。
$( "#myform" ).validate({
rules: {
national_id: {
required: true,
rangelength: [17, 23]
}
}
});
因为它可以接受 18/19/20/21/22 是正确的 - 这应该是错误的。
如何使用 jQuery Validation 插件实现这种 rangelength
验证?
PS:我知道我可以做一些像 this one 这样简单的事情,但是我们可以使用 jQuery 验证来做这样的事情吗?
您必须使用 the .addMethod()
method 创建您自己的自定义规则。
jQuery.validator.addMethod("exactlengths", function(value, element, params) {
return this.optional(element) || (value.length == params[0] || value.length == params[1]);
}, jQuery.validator.format("Please only enter {0} or {1} characters"));
声明:
$( "#myform" ).validate({
rules: {
national_id: {
required: true,
exactlengths: [17, 23] ....
我在 additional.js 中添加了一个方法,它将验证一个范围并允许特定的数字:
$.validator.addMethod(
"ranges_and_single",
function(value, element, ranges) {
var allowMeToo = false;
var valid = false;
console.log(this.optional(element));
for(var i=0; i<ranges.length; i++) {
if(ranges[i].length == 1) {
if(value == ranges[i][0])
{
allowMeToo = true;
}
}
if(allowMeToo)
{
valid = true;
break;
}
else if(value >= ranges[i][0] && (value <= ranges[i][1] || allowMeToo )) {
valid = true;
break;
}
}
return this.optional(element) || valid;
},
"Please enter the value in the ranges or perticular number"
);
例如
$( "#myform" ).validate({
rules: {
fieldName: {
ranges_and_single:[ [2, 5], [7], [10, 15], [17], [25] ],
//It will allow 2, 3, 4, 5 7, 10, 11, 12, 13, 14, 15, 17 and 25
}
}
});