lm-form
Version:
* 作者:liuduan * 邮箱:liuduan.05.05@163.com * 版本:**`1.0.2`**
347 lines (307 loc) • 13.5 kB
JavaScript
export default {
// 密码校验
password: (value, param = []) => {
value = `${value}`.trim();
return {
validator: param[0] && param[1] ? new RegExp('^[0-9a-zA-Z]{' + param[0] + ',' + param[1] + '}$').test(value) : false,
message: param[0] && param[1] ? `请填写${param[0]}-${param[1]}位字母、数字` : '填写有误'
}
},
// 两次填写是否一致校验
equal: (value, param = []) => {
value = `${value}`.trim();
return {
validator: value === param[0],
message: param[1] ? `两次填写${param[1]}不一致` : '两次填写不一致'
}
},
// 年龄校验
age: (value) => {
value = `${value}`.trim();
//根据身份证号判断年龄
let today = new Date(),
year = today.getFullYear(),
month = today.getMonth() + 1,
day = today.getDate(),
age = year - value.substring(6, 10) - 1,
idMonth = value.substring(10, 12) - 0,
idDay = value.substring(12, 14) - 0;
if (idMonth < month || (idMonth === month && idDay <= day)) {
age++;
}
return {
validator: 21 <= age && age <= 55,
message: '对不起,您的年龄不符合准入要求'
};
},
// 身份证号校验
idNumber: (value) => ({
validator: ((cardNum) => {
//省份证号校验
var aCity = {
11: "北京",
12: "天津",
13: "河北",
14: "山西",
15: "内蒙古",
21: "辽宁",
22: "吉林",
23: "黑龙江 ",
31: "上海",
32: "江苏",
33: "浙江",
34: "安徽",
35: "福建",
36: "江西",
37: "山东",
41: "河南",
42: "湖北 ",
43: "湖南",
44: "广东",
45: "广西",
46: "海南",
50: "重庆",
51: "四川",
52: "贵州",
53: "云南",
54: "西藏 ",
61: "陕西",
62: "甘肃",
63: "青海",
64: "宁夏",
65: "新疆",
71: "台湾",
81: "香港",
82: "澳门",
91: "国外 "
},
iSum = 0;
if (!cardNum) {
return false;
}
if (!cardNum.length === 18) {
return false;
}
if (!/^\d{17}(\d|x)$/i.test(cardNum)) {
return false;
}
cardNum = cardNum.replace(/x$/i, "a");
if (aCity[window.parseInt(cardNum.substr(0, 2))] == null) {
return false;
}
var sBirthday = cardNum.substr(6, 4) + "/" + Number(cardNum.substr(10, 2)) + "/" + Number(cardNum.substr(12, 2));
var d = new Date(sBirthday);
if (sBirthday !== (d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate())) {
return false;
}
for (var i = 17; i >= 0; i--) {
iSum += (Math.pow(2, i) % 11) * window.parseInt(cardNum.charAt(17 - i), 11);
}
if (iSum % 11 !== 1) {
return false;
}
return true;
})(`${value}`.trim()),
message: '请填写正确的身份证号'
}),
// 数字范围,两个小数点
digital: (value) => {
value = `${value}`.trim();
return {
validator: /^(?:[1-9]\d*(\.\d{1,2})?|0\.\d{1,2})$/.test(value),
message: '请填写大于0数字(如:8.25)'
}
},
// 车辆成交价范围
limitDigital: (value, param = []) => {
value = `${value}`.trim();
return {
validator: /^(?:[1-9]|[1-9]\d+)(\.\d{1,2})?$/.test(value) && value <= param[1] && value >= param[0],
message: `请填写${param[0]}元-${param[1]}元的数字`
}
},
// 整数范围
intRange: (value, param = [0]) => {
value = `${value}`.trim();
return {
validator: param[1] ? (new RegExp('^[1-9]\\d*$', 'g').test(value) && (window.parseInt(value) >= param[0]) && (window.parseInt(value) <= param[1])) : false,
message: param[0] && param[1] ? `请填写${param[0]}-${param[1]}的整数` : '请填写指定范围的整数'
}
},
// 数字范围
digitalRange: (value, param = [0]) => {
value = `${value}`.trim();
return {
validator: param[1] ? (/^(?:[1-9]|[1-9]\d+)(\.\d{1,2})?$/.test(value) && (window.parseFloat(value) <= param[1]) && (parseFloat(value) >= param[0])) : false,
message: param[0] && param[1] ? `还款金额请填写${param[0]}-${param[1]}的数字` : '还款金额填写有误'
}
},
// 正整数位数范围
number: (value, param = [0]) => {
const start = param[0] <= 1 ? 0 : param[0] - 1,
end = param[1] - 1;
return {
validator: param[1] ? new RegExp('^[1-9]\\d{' + start + ',' + end + '}$', 'g').test(`${value}`.trim()) : false,
message: param[0] && param[1] ? `请填写${param[0]}-${param[1]}位正整数` : '请填写正确的正整数位数'
};
},
// 邀请码数字范围
inviteCode: (value, param = [0]) => {
const start = param[0] <= 1 ? 0 : param[0] - 1,
end = param[1] - 1;
return {
validator: param[1] ? new RegExp('^[1-9]\\d{' + start + ',' + end + '}$', 'g').test(`${value}`.trim()) : false,
message: param[0] && param[1] ? `请填写${param[0]}-${param[1]}位数字` : '请填写正确位数的数字'
};
},
// 姓名校验
name: (value, param = [2, 10]) => ({
validator: new RegExp('^[\\u4e00-\\u9fa5\\u0028\\u0029\\uff08\\uff09]{' + param[0] + ',' + param[1] + '}$').test(`${value}`.replace(/\s/g, '')),
message: param[0] && param[1] ? `请填写${param[0]}-${param[1]}个中文` : '请填写正确个数的中文'
}),
// 姓名含'·'校验
nameAddDot: (value, param = [2, 15]) => {
value = `${value}`.replace(/\s/g, '');
let str = '·';
let flag = new RegExp('^[\\u4e00-\\u9fa5\\u0028\\u0029\\uff08\\uff09·]{' + param[0] + ',' + param[1] + '}$').test(value);
let n = value.indexOf(str), l = value.length;
if ((flag && n > -1) &&
(n === 0 || n === (l - 1) || value.split(str).length > 2)
) {
flag = false;
}
return {
validator: flag,
message: param[0] && param[1] ? `请填写${param[0]}-${param[1]}个中文` : '请填写正确个数的中文'
}
},
// 区号校验
areacode: (value) => ({
validator: /^(?:0\d{2}|0\d{3})$/.test(`${value}`.trim()),
message: '请填写正确的区号'
}),
// 固定电话校验
telephone: (value, param = []) => {
let flag = undefined;
// 区号校验通过,进行固化校验
if (/^(?:0\d{2}|0\d{3})$/.test(param[0])) {
const regexp = param[0].length === 3 ? (/^\d{8}$/) : /^\d{7,8}$/;
flag = regexp.test(`${value}`.trim());
}
return {
validator: flag,
message: typeof flag === 'undefined' ? '请填写正确的区号' : '请填写正确的固话'
};
},
// 手机号码校验
mobilephone: (value) => ({
validator: /^(?:13|14|15|16|17|18|19)\d{9}$/.test(`${value}`.trim()),
message: '请填写正确的手机号'
}),
// 长度校验
length: (value, param = []) => {
const len = `${value}`.trim().length;
return {
validator: param[0] && param[1] ? (len >= param[0] && len <= param[1]) : false,
message: param[0] && param[1] ? `请填写${param[0]}-${param[1]}个字符` : '请填写正确个数的字符'
};
},
// 银行卡检验规则,允许0开头(交通银行,修改:2017/2/7)
bankCard: (value) => ({
validator: /^\d{12,23}$/.test(`${value}`.trim()),
message: '请填写正确的银行卡号'
}),
// 信用卡号校验
creditCard: (value) => ({
validator: /^[1-9]\d{13,15}$/.test(`${value}`.trim()),
message: '请填写正确的信用卡号'
}),
consistency: (value, param = []) => ({
validator: param[0] ? `${value}`.trim() !== `${param[0]}`.trim() : false,
message: param[0] && param[1] ? `${param[1]}与${param[2]}不能相同` : '两个值不能相同'
}),
// 通过后台请求验证身份证号是否被注册过
idcardUnique: (value) => {
value = `${value}`.trim();
let flag = true;
const request = new XMLHttpRequest();
request.open('POST', '/exist/identity', false);
//发送合适的请求头信息
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
request.send(`idNumber=${value}`);
if ((request.status >= 200 && request.status < 300) || request.status === 304) {
const data = request.responseText;
// 1:已注册,2:格式不对
flag = ([1, 2].indexOf(data - 0) === -1);
} else {
flag = false;
}
return {
validator: flag,
message: '该身份证号已注册!'
};
},
lt: (value, param = []) => ({
validator: param[0] && param[1] ? param[0] >= param[1] : false,
message: param[0] && param[1] ? `可用余额${param[0]}<${param[1]},暂不能提现!` : '可用余额不足,暂不能提现'
}),
// 数字范围 提示数字单位为万
digitalRangeTwo: (value, param = []) => {
value = `${value}`.trim();
return {
validator: param[0] && param[1] ? /^(?:[1-9]|[1-9]\d+)(\.\d{1,2})?$/.test(value) && parseFloat(value / 10000) <= param[1] && parseFloat(value / 10000) >= param[0] : false,
message: param[0] && param[1] ? `请填写${param[0]}万-${param[1]}万的数字` : '请填写正确的数字'
}
},
// 图形验证码
imageCode: (value, param = []) => ({
validator: param[0] ? new RegExp('^[0-9a-zA-Z]{' + param[0] + '}$').test(`${value}`.trim()) : false,
message: param[0] ? `请填写${param[0]}位图形验证码` : '请填写正确位数的图形验证码'
}),
// 短信验证码
smsCode: (value, param = []) => ({
validator: new RegExp('^[0-9]{' + param[0] + '}$').test(`${value}`.trim()),
message: param[0] ? `请填写${param[0]}位短信验证码` : '请填写正确位数的短信验证码'
}),
// 月收入校验 特殊处理
income: (value) => {
value = `${value}`.trim();
return {
validator: /^(?:[1-9]\d*(\.\d{1,2})?|0\.\d{1,2})$/.test(value) && (window.parseInt(value) >= 1000),
message: '收入金额过小或格式错误(最多两位小数)'
}
},
// 车架号验证
VIN: (value) => {
value = `${value}`.trim().toUpperCase();
return {
validator: /^[0-9|A-H|J-N|P|R-Z]{13}[0-9]{4}$/.test(value) && /.*[A-H|J-N|P|R-Z].*/.test(value),
message: '请填写正确的车架号'
}
},
//车牌号验证
carPlateNumber: (value) => {
value = `${value}`.trim();
return {
validator: value.length === 7 && (/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/.test(value)),
message: '请填写正确的车牌号'
}
},
// 无链接符日期
dateNum: (value) => {
value = `${value}`.trim();
return {
validator: /(^(19|20)(\d{2})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8])))$)|(^((19|20)(0[48]|[2468][048]|[13579][26])|(2000))0229$)/.test(value),
message: `请填写例20180101格式的日期`
}
},
// 邮箱
email: (value) => {
value = `${value}`.trim();
let p_email = /^((([a-z]|\d|[!#$%&'*+-/=?^_`{|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#$%&'*+-/=?^_`{|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;
return {
validator: p_email.test(value),
message: '请填写正确的邮箱格式'
}
}
};