正则字典
var regulars = {
year: {
regExp: /^(19|20)\d{2}$/,
message: "只能为年份(四位,1900-2099)"
},
number: {
regExp: /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/,
message: "只能为数字"
},
bankNum: {
regExp: /^\d{16}|\d{19}$/,
message: "格式错误"
},
telephone: {
regExp: /^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$/,
message: "格式错误"
},
int: {
regExp: /^[0-9]*$/,
message: "只能为正整数"
},
phone: {
regExp: /^[1][0-9]{10}$/,
message: "格式错误"
},
allChinese: {
regExp: /^([\u4E00-\u9FA5]+,?)+$/,
message: "只能为中文"
},
haveChinese: {
regExp: "[\\u4E00-\\u9FFF]+",
message: "中含有汉字"
},
idCard15: {
regExp: /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/,
message: "格式错误"
},
idCard18: {
regExp: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$/,
message: "格式错误"
},
url: {
regExp: /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/,
message: "格式错误"
},
email: {
regExp: /^[-_A-Za-z0-9]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/,
message: "格式错误"
},
Special: {
regExp: ["~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "{", "}", "[", "]", "(", ")", ":", ";", "'", "|", "\\", "<", ">", "?", "/", "<<", ">>", "||", "//", "administrators", "administrator", "管理员", "系统管理员", "admin", "select", "delete", "update", "insert", "create", "drop", "alter", "trancate"],
message: "不能包含特殊字符"
},
null: {
regExp: "^[ ]+$",
message: "不能为空"
},
};
验证方法
/**
* 验证方法
*
* @param {*} type
* @param {*} str
* @return {*}
*/
function test(type, str) {
var re = new RegExp(regulars[type].regExp);
return !re.test(str) ? true : false;
};
方法第二次封装
// 验证用方法集合
var verifyObj = {
year: {
event: value => { return test('year', value) },
message: regulars.year.message,
},
number: {
event: value => { return test('number', value) },
message: regulars.number.message
},
bankNum: {
event: value => { return test('bankNum', value) },
message: regulars.bankNum.message
},
telephone: {
event: value => { return test('telephone', value) },
message: regulars.telephone.message
},
int: {
event: value => { return test('int', value) },
message: regulars.int.message
},
phone: {
event: value => { return test('phone', value) },
message: regulars.phone.message
},
url: {
event: value => { return test('url', value) },
message: regulars.url.message
},
email: {
event: value => { return test('email', value) },
message: regulars.email.message
},
allChinese: {
event: value => { return test('allChinese', value) },
message: regulars.allChinese.message
},
haveChinese: {
event: function (str) {
var re = new RegExp(regulars.haveChinese.regExp);
return re.test(str) ? true : false;
},
message: regulars.haveChinese.message
},
notNull: {
event: function (str) {
if (str == "" || str == undefined || str == null || str == NaN) return !false;
var re = new RegExp(regulars.null.regExp);
return re.test(str);
},
message: regulars.null.message
},
isSpecial: {
event: function (str) {
str = str.toLowerCase();
for (var i = 0; i < regulars.Special.regExp.length; i++) {
if (str.indexOf(regulars.Special.regExp[i]) >= 0) {
return false;
}
}
return true;
},
message: regulars.Special.message
},
isIdCard: {
event: function (str) {
var re1 = new RegExp(regulars.idCard15.regExp);
var re2 = new RegExp(regulars.idCard18.regExp);
return !(re1.test(str) || re2.test(str) ? true : false);
},
message: regulars.idCard18.message
}
};
使用案例
两者都可以
方法1
test('year', value)
方法2
/**
* 正则验证方法
*
* @param {*} value
* @param {*} type
* @return {*}
*/
const jude = function (value, type) {
var keyArray = getKeyArray(verifyObj);
if (type.indexOf('$') != -1) {
return customLength(type, value);
} else if (inArray(type, keyArray) != -1) {
var answer = verifyObj[type].event(value);
return answer ? verifyObj[type].message : false;
} else {
console.error('error => 未找到验证规则:' + type);
};
};
// 调用
jude("1998", "year");