Skip to content

Commit 8bc443f

Browse files
committed
新增 filter() hook;
改进 number format 的表达式兼容性
1 parent 1e0041d commit 8bc443f

File tree

3 files changed

+30
-17
lines changed

3 files changed

+30
-17
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# jQuery Validator
22

3-
当前版本: **1.3.9**
3+
当前版本: **1.4.0**
44

55
jQuery Validator 是一个简单易用、功能强大的基于jQuery的表单验证框架。其设计目标如下:
66
* 【简单易用,轻松上手】:一般情况下,无需进行任何配置,内置的校验器和校验规则即可满足绝大多数中文环境下的常规表单验证需求,开箱即可使用!

jquery-validator.js

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**************************************
22
@Name: jQuery-Validator 基于jQuery的前端验证框架
3-
@Version: 1.3.9
3+
@Version: 1.4.0
44
@Author: Ready
55
@Date: 2022-01-12
66
@Documentation: https://codeplayer.vip/p/j7sud
@@ -10,7 +10,7 @@
1010
!function ($, global) {
1111
var console = global && global.console;
1212
if(typeof jQuery === "undefined" || $ !== jQuery){
13-
console && console.log("jQuery must be initialized before loading the Validator.");
13+
console && console.warn("jQuery must be initialized before loading the Validator.");
1414
return;
1515
}
1616
var V = function(method){
@@ -36,7 +36,7 @@
3636
},
3737
fn = V.fn = V.prototype = {
3838
// 版本号
39-
version: "1.3.9",
39+
version: "1.4.0",
4040

4141
constructor: V,
4242

@@ -45,8 +45,19 @@
4545
return $dom.val();
4646
},
4747

48-
// 严格模式:如果为false,则指定选择器没有对应元素时,直接忽略该元素的校验
49-
strict: true,
48+
// 校验跳过模式(支持位运算或运算):0=不忽略任何元素;1=仅忽略不存在的元素;2=仅忽略不可见的元素;4=仅忽略只读的元素
49+
skip: 0,
50+
51+
filter: function($dom, context){
52+
var s = this.skip;
53+
if ( f > 0 && (
54+
(s & 1) === 1 && !$dom.length
55+
|| (s & 2) === 2 && !$dom.is(':visible')
56+
|| (s & 4) === 4 && $dom.is('[readonly]'))
57+
){
58+
return false;
59+
}
60+
},
5061

5162
// 用于选取label的attribute
5263
labelAttr: "label",
@@ -163,26 +174,28 @@
163174
expr = sign + expr;
164175
}
165176
// 位数表达式
166-
var subExpr = expr.substr(1);
177+
var subExpr = expr.substr(1), digits = "+", fraction = "";
167178
switch(subExpr){
168179
case "int":
169180
case "integer":
170-
regex = new RegExp("^" + signExpr + "\\d+$");
171181
break;
172182
case "money":
173-
regex = new RegExp("^" + signExpr + "\\d+(\\.\\d{1,2})?$");
183+
fraction = "(\\.\\d{1,2})?";
174184
break;
175185
case "float":
176186
case "double":
177-
regex = new RegExp("^" + signExpr + "\\d+(\\.\\d+)?$");
187+
fraction = "(\\.\\d+)?";
178188
break;
179189
default:
180190
var subArray = subExpr.split(".", 2);
181-
regex = "^" + signExpr + "\\d" + subArray[0];
182-
if(subArray[1]) regex += "\\.\\d" + subArray[1];
183-
regex = new RegExp(regex + "$");
191+
digits = subArray[0];
192+
if( subArray[1] ){
193+
fraction = subArray[1].startsWith("{0,")
194+
? "(\\.\\d" + subArray[1].replace(/^\{0,/, "{1,") + ")?"
195+
: "\\.\\d" + subArray[1];
196+
}
184197
}
185-
cache[context.rule.format] = regex;
198+
cache[context.rule.format] = regex = new RegExp("^" + signExpr + "\\d" + digits + fraction + "$");
186199
}
187200
V.debug && log( "number formatter [" + expr + "] regexp:", regex );
188201
if(regex.test(value)){
@@ -533,7 +546,7 @@
533546
context = V.context = { ruleName: ruleName, origin: rule, $dom: $dom, rule: rule };
534547
V.debug && log( "current validate context [" + (is$ ? $dom.selector : value) + "]:" , context );
535548
if( is$ ){
536-
if(!$dom.length && !me.strict) return me.afterHandler(true, context); // 非严格模式,直接跳过校验
549+
if( me.filter($dom, context) === false ) return me.afterHandler(true, context); // 非严格模式,直接跳过校验
537550
value = me.getValue($dom, context);
538551
if( required == null ){
539552
var r = me.isRequired(value, context);

0 commit comments

Comments
 (0)