jquery.validation自定义正则表达式验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery.validation自定义正则表达式验证相关的知识,希望对你有一定的参考价值。

参考技术A 做项目时前台表单验证用了jquery.validation插件。

发现在做正则表达式验证时没有参数设置可以使用,需要一个个添加方法,比较麻烦。

就做了一个简单的分装,也总结了一些正则表达式。

/**

* @anthor ycf

* @date 1017/11/3

*

* 本js是对jquery.validator的自定义方法的封装

* 只能用于正则表达验证

* 页面必须调用jquery.validator.js

* 共两个方法

* regular 只添加一个正则自定义函数

* regulararr 批量导入,传入对象即可。

* 具体信息请看页面展示及函数参数说明

* 以下是一些常用的正则表达式。

*/

//用户名验证

var usernameExp = /^[a-zA-Z0-9_-]4,16$/;

//姓名验证

var nameExp = /^[\u4E00-\u9FA5A-Za-z]+$/;

//密码验证

var pwdExp = /^[0-9a-zA-Z_#!@$%^&*]6,16$/;

//年龄验证

var ageExp = /^(?:0|[1-9][0-9]?|120)$/;

//邮箱验证

var emailExp = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;

//固定电话验证

var telExp = /^0\d2,3-\d7,8(-\d1,6)?$/;

//手机号码验证

var phoneExp = /^0?(13[0-9]|15[012356789]|17[013678]|18[0-9]|14[57])[0-9]8$/;

//英文名验证

var enameExp = /^[a-zA-Z]+$/;

//邮政编码验证

var postalcodeExp = /^[0-9][0-9]5$/;

//QQ验证

var qqExp = /^\d5,10$/;

//非法字符验证

var ffzfExp = /[@#\$%\^&\*]+/g;

//IP验证

var ipExp = /((25[0-5]|2[0-4]\d|((1\d2)|([1-9]?\d)))\.)3(25[0-5]|2[0-4]\d|((1\d2)|([1-9]?\d)))/;

//非负整数验证

var ffzsExp = /^(0|[1-9]\d*)$/;

//正负小数验证

var zfxsExp = /^[+-]?\d*\.\d1,3$/;

//正负整数和小数验证

var zfzshxsExp = /^(-)?\d+(\.\d+)?$/;

//身份证号验证

var idcardExp = /^[1-9][0-9]5(19[0-9]2|200[0-9]|201[0-9]|202[0-9]|203[0-9])(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])[0-9]3[0-9xX]$/i;

//限制输入

var limitExp = /^((?!test).)*$/; //不能输入包含test的字符串

/**

* 自定义正则匹配方法

* @param funName 自定义方法名

* @param Exp 正则表达式

* @anthor ycf

*/

function regular(funName,Exp)

jQuery.validator.addMethod(funName, function(value, element)

return this.optional(element) || Exp.test(value);

, "不通过");



/**

* 批量添加自定义正则匹配方法

* @param objExp 对象

* 例如 "postalcodeCheck":postalcodeExp

*

* @anthor ycf

*/

function regularArr(objExp)

$.each(objExp, function(i)

jQuery.validator.addMethod(i, function(value, element)

return this.optional(element) || objExp[i].test(value);

, "不通过");

);



这样在前台js里只需要申明一个对象,并引入这个js文件就行了。希望能帮到大家。

验证控件jQuery Validation Engine调用外部函数验证

在使用jQuery Validation Engine的时候,我们除了使用自带的API之外,还可以自己自定义正则验证。自定义正则验证上一篇已经讲过了,如果想使用自定义函数进行验证怎么办?其实这个控件有个bug,在api中说

也就是在我们需要进行验证的地方加上funcCall[自定义函数名],但是我们会发现总会报错,说找不到你这个函数名。其实它的要求是要添加required进行综合验证,也就是validate[required,funcCall[yorn]],这样它才识别我们的自定义函数。但是我们就是不想要required这个呢?或者说我们在符合某种条件下才想让required这个非空验证功能生效呢?

 <textarea class="m-area add-tw validate[funcCall[yorn]]"  id="remark" cols="30" rows="10" ></textarea>

 

那么就需要使用以下几种方法综合施行,网上老外的解决办法就是在函数中push一个required,可以让其正常执行。

我定义了一个yorn的函数,而基本格式就是function yorn(field, rules, i, options){},其中field代表的是你验证的那个元素,我这里验证的是textarea,那么field就代表的是textarea。

首先我讲一下我要实现的功能,我的需求是在点击不通过且备注为空的时候触发验证,提示“必须填写内容”。那么在通过备注为空,通过备注不为空,不通过备注不为空的情况下都不能触发验证提示信息。而如果validate[required]这样的话,只要不填写备注信息都会触发提示信息。所以我的思路是,当点击保存按钮的时候判断,点击的是哪个radio,点击不通过的时候给不通过的radio添加一个自定义属性,同时赋值。而当点击通过radio的时候删除这个自定义属性。然后接着进入验证,也就是进入自定义函数,获取到不通过radio的自定义属性值,获取到备注的value,然后判断这两个条件是否同时成立,如果条件成立,则首先rules.push(\'required\');因为我们前面说了如果想要实现自定义函数验证必须要有required,然后接着return options.allrules.required.alertText; 这句话是什么意思呢?就是返回你要提示的信息。而这个提示信息则另有地方进行设置。


html文件,validate[funcCall[yorn]]设置自定义函数validate[funcCall[自定义函数名]]
复制代码
<form id="approval">//这个验证控件必须有form
            <div class="name-ipt">
                <div class="m-name"><span>意见:</span></div>
                <input type="radio" name="trial" class="m-radio col" />通过
                <input type="radio" name="trial" class="m-radio col"  id="nocheck"/>不通过
            </div>
            <div class="name-ipt"></div>
            <div class="area-ipt add-td">
                <div class="m-name"><span>备注:</span></div>
                <textarea class="m-area add-tw validate[funcCall[yorn]]" id="remark" cols="30" rows="10"></textarea>
                <span class="m-span add-stl">剩余可输入1000字</span>
            </div>
        </div>
</form>
<div class="add-sb">
     <a href="#" class="save-btn m" ng-click="saveAudit()" >保存</a>
</div>
(有效:步骤1)
复制代码

因为我是用的angular,所以给保存一个事件,在点击保存的时候触发事件,然后判断两个radio哪个被checked,其他的上面说过。接着触发验证进入自定义函数中。、、

复制代码
//自己js文件中写
//保存 $scope.saveAudit = function(){ if($(\'#nocheck\').attr(\'checked\')){ $("#remark").attr("trialAttr",\'N\'); }else{ $("#remark").removeAttr(\'trialAttr\'); } if($(\'#approval\').validationEngine(\'validate\')){ //验证通过的话之后要执行的内容 } }
(有效:步骤2)
复制代码

 

自定义函数必须带rules.push(\'required\');同时return options.allrules.required.alertText;这个自定义函数写在自己的js文件里就行

复制代码
//自己的js文件中写
function yorn(field, rules, i, options){ var trialAttr = field.attr("trialAttr") ; var textareaval = field.val(); if(trialAttr == "N" && textareaval==\'\'){ rules.push(\'required\'); return options.allrules.required.alertText; } }
(有效:步骤3)
复制代码

接下来要设置自定义提示信息了,找到jquery.validationEngine-zh_CN.js文件,然后在最下面自己跟随一个对象,函数名在前面,后面alertText后跟你要提示的信息。这样就OK了。

//这个在jquery.validationEngine-zh_CN.js中写

(有效:步骤4)

 

之前我在这个文件的下面按照api自定义了一个函数,但是发现根本无法执行,因为当进入验证的时候,首先判断validate[required,funcCall[yorn]]的自定义函数中是否存在required,如果不存在就无法进入到jquery.validationEngine-zh_CN.js这个文件中执行我们内部定义的函数。但是如果把自定义函数放在我们自己的js中,就会先执行我们自己js文件中的函数,最后才判断是否存在required,而这个时候我们已经push进去了,所以就不会报错说找不到你自定义函数名了。

(这个是无效且不可执行的,不要用)

这个验证控件其实挺不错的,只是这个bug给搞了半天,还好网上有解决办法,但是貌似没有一个像我说的这么清楚的,都是点明一下而已。希望能够帮助到大家,同时自己留存以后用。

以上是关于jquery.validation自定义正则表达式验证的主要内容,如果未能解决你的问题,请参考以下文章

验证控件jQuery Validation Engine调用外部函数验证

验证控件jQuery Validation Engine调用外部函数验证

无效的限定符。 jQuery.validation.js

使用 Jquery Validation 添加自定义错误消息

Jquery Validation,如果出现错误,我该如何运行自定义代码

Jquery Validation 适用于默认 [Required] 但不适用于自定义类