1 function validateNum(obj) {
2 //正整数(此处用了缓存)
3 var number = obj.data('validate').number;
4 //小数点(此处用了缓存)
5 var decimal = obj.data('validate').decimal;
6 //动态基本验证正则
7 eval("var reg = /^[0-9]{0," + number + "}([.]?[0-9]{0," + decimal + "})$" + "/g;");
8 var value = obj.val();
9 var maxnumlen = number + decimal + 1; //最大长度 + 1(小数点)
10 if (!reg.test(obj.val())) return false;
11 //最大长度等于当前值的长度并且值没有"."
12 if (maxnumlen == value.length && value.indexOf('.') <= 0) {
13 return false;
14 }
15 //尝试得到"."的索引
16 var valueindexof = value.indexOf('.');
17 if (valueindexof > 0) {
18 //如果"."索引后一位是空那么肯定是返回false
19 if (value.charAt(valueindexof + 1) == "") {
20 return false;
21 }
22 }
23 //分割值就很容易判断出前后内容
24 var valuesplit = value.split('.');
25 //如果值的长度大于定义的正整数长度
26 if (value.length > number) {
27 if (valuesplit.length == 1) {
28 return false;
29 }
30 //最大长度-所定义长度 大于 最大长度 即超长 ,false.
31 if (maxnumlen - number >= maxnumlen) {
32 return false;
33 }
34 }
35 return true;
36 }
给元素缓存一个validate对象后,调用即可。
定义:
$("#example").data("validate", { number: 2, decimal: 2 });
调用:
validateNum($("#example"));