/* Validform datatype extension By sean during December 8, 2012 - February 20, 2013 For more information, please visit http://validform.rjboy.cn 扩展以下类型: date:匹配日期 zh:匹配中文字符 dword:匹配双字节字符 money:匹配货币类型 ipv4:匹配ipv4地址 ipv6:匹配ipv6地址 num:匹配数值型 qq:匹配qq号码 unequal:当前值不能等于被检测的值,如可以用来检测新密码不能与旧密码一样 notvalued:当前值不能包含指定值,如密码不能包含用户名等的检测 min:多选框最少选择多少项 max:多选框最多不能超过多少项 byterange:判断字符长度,中文算两个字符 numrange:判断数值范围,如小于100大于10之间的数 daterange:判断日期范围 idcard:对身份证号码进行严格验证 */ (function(){ if($.Datatype){ $.extend($.Tipmsg.w,{ "date":"请填写日期!", "zh":"请填写中文!", "dword":"请填写双字节字符!", "money":"请填写货币值!", "ipv4":"请填写ip地址!", "ipv6":"请填写IPv6地址!", "num":"请填写数值!", "qq":"请填写QQ号码!", "equal":"两次输入的密码不一致!", "unequal":"值不能相等!", "notvalued":"不能含有特定值!", "idcard":"身份证号码不对!" }); $.extend($.Datatype,{ /* reference http://blog.csdn.net/lxcnn/article/details/4362500; 日期格式可以是:20120102 / 2012.01.02 / 2012/01/02 / 2012-01-02 时间格式可以是:10:01:10 / 02:10 如 2012-01-02 02:10 2012-01-02 */ "date":/^(?:(?:1[6-9]|[2-9][0-9])[0-9]{2}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:(?:1[6-9]|[2-9][0-9])(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)([-/.]?)0?2\2(?:29))(\s+([01][0-9]:|2[0-3]:)?[0-5][0-9]:[0-5][0-9])?$/, //匹配中文字符; "zh":/^[\u4e00-\u9fa5]+$/, //匹配双字节字符; "dword":/^[^\x00-\xff]+$/, //货币类型; "money":/^([\u0024\u00A2\u00A3\u00A4\u20AC\u00A5\u20B1\20B9\uFFE5]\s*)(\d+,?)+\.?\d*\s*$/, //匹配ipv4地址; "ipv4":/^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})$/, /* 匹配ipv6地址; reference http://forums.intermapper.com/viewtopic.php?t=452; */ "ipv6":/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/, //数值型; "num":/^(\d+[\s,]*)+\.?\d*$/, //QQ号码; "qq":/^[1-9][0-9]{4,}$/, /* 参数gets是获取到的表单元素值, obj为当前表单元素, curform为当前验证的表单, datatype为内置的一些正则表达式的引用。 */ "equal":function(gets,obj,curform,datatype){ var withele=$.trim(obj.attr("with")); var val=curform.find(withele+",[name='"+withele+"']").val() || withele; if(gets!=$.trim(val)){ return false; } }, "unequal":function(gets,obj,curform,datatype){ /* 当前值不能与指定表单元素的值一样,如新密码不能与旧密码一样,密码不能设置为用户名等 注意需要通过绑定with属性来指定要比较的表单元素,可以是clas,id或者是name属性值 eg. eg1. eg2. eg3. 也可以用来验证不能与with指定的值相等 当上面根据class,id和name都查找不到对象时,会直接跟with的值比较 eg4. 该文本框的值不能等于100 */ var withele=$.trim(obj.attr("with")); var val=curform.find(withele+",[name='"+withele+"']").val() || withele; if(gets==$.trim(val)){ return false; } }, "notvalued":function(gets,obj,curform,datatype){ /* 当前文本框的值不能含有指定文本框的值,如注册时设置的密码里不能包含用户名 注意需要给表单元素绑定with属性来指定要比较的表单元素,可以是clas,id或者是name属性值 eg. 也可以用来验证不能包含with指定的值 当上面根据class,id和name都查找不到对象时,会直接跟with的值比较 eg2. 要求不能含有"validform"字符 */ var withele=$.trim(obj.attr("with")); var val=curform.find(withele+",[name='"+withele+"']").val() || withele; if(gets.indexOf($.trim(val))!=-1){ return false; } }, "min":function(gets,obj,curform,datatype){ /* checkbox最少选择n项 注意需要给表单元素绑定min属性来指定是至少需要选择几项,没有绑定的话使用默认值 eg. */ var minim=~~obj.attr("min") || 2, numselected=curform.find("input[name='"+obj.attr("name")+"']:checked").length; return numselected >= minim ? true : "请至少选择"+minim+"项!"; }, "max":function(gets,obj,curform,datatype){ /* checkbox最多选择n项 注意需要给表单元素绑定max属性来指定是最多需要选择几项,没有绑定的话使用默认值 eg. */ var atmax=~~obj.attr("max") || 2, numselected=curform.find("input[name='"+obj.attr("name")+"']:checked").length; if(numselected==0){ return false; }else if(numselected>atmax){ return "最多只能选择"+atmax+"项!"; } return true; }, "byterange":function(gets,obj,curform,datatype){ /* 判断字符长度,中文算两个字符 注意需要给表单元素绑定max,min属性来指定最大或最小允许的字符长度,没有绑定的话使用默认值 */ var dregx=/[^\x00-\xff]/g; var maxim=~~obj.attr("max") || 100000000, minim=~~obj.attr("min") || 0; getslen=gets.replace(dregx,"00").length; if(getslen>maxim){ return "输入字符不能多于"+maxim+"个,中文算两个字符!"; } if(getslenmaxim){ return "值不能大于"+maxim+"!"; } return true; }, "daterange":function(gets,obj,curform,datatype){ /* 判断日期范围 注意需要给表单元素绑定max或min属性,或两个同时绑定来指定最大或最小可输入的日期 日期格式:2012/12/29 或 2012-12-29 或 2012.12.29 或 2012,12,29 */ var maxim=new Date(obj.attr("max").replace(/[-\.,]/g,"/")), minim=new Date(obj.attr("min").replace(/[-\.,]/g,"/")), gets=new Date(gets.replace(/[-\.,]/g,"/")); if(!gets.getDate()){ return "日期格式不对!"; } if(gets>maxim){ return "日期不能大于"+obj.attr("max"); } if(gets