最近项目开发中遇到这样的需求“手机号码或者固话至少填写一个”,如下图所示:

项目采用的jquery.validate.js验证组件,目前组件不支持这种“或”逻辑的验证,于是就自己定义一个
jQuery.validator.addMethod("phone", function(value, element) {var mobile = $("#mobile").val();// 手机号码var telephone = $("#telephone").val();// 固定电话var mobileRule = /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0-9]|170)d{8}$/;var telephoneRule = /^d{3,4}-?d{7,9}$/;// 都没填if (isEmpty(mobile) && isEmpty(telephone)) {//自定义错误提示$("#receivingMobile_tip").addClass("errorHint").text("请填写固定电话或手机号码");return false;}var mobilePass = false;var telephonePass = false;// 手机填了、固定电话没填if (!isEmpty(mobile) && isEmpty(telephone)) {if (!mobileRule.test(mobile)) {//自定义错误提示$("#receivingMobilePhone_tip").removeClass("successHint").addClass("errorHint").text("手机号码格式不对");return false;} else {mobilePass = true;}}// 手机没填、固定电话填了if (isEmpty(mobile) && !isEmpty(telephone)) {if (!telephoneRule.test(telephone)) {//自定义错误提示$("#receivingTelephone_tip").removeClass("successHint").addClass("errorHint").text("固定电话格式不对");return false;} else {telephonePass = true;}}if (mobilePass || telephonePass) {//自定义成功提示$("#receivingTelephone_tip").removeClass("errorHint").addClass("successHint").text("");return true;} else {return false;}}, "ignore");补充isEmpty函数:
// 空字符串判断function isEmpty(v, allowBlank) { return v === null || v === undefined || (!allowBlank ? v === "" : false);}处理validate的errorPlacement:
errorPlacement : function(error, element) {//忽略自定义的方法错误提示if (error.text() == "ignore") {return;} }在rules里面使用
rules : {telephone : {phone : []},mobile : {phone : []}}