@2345mfe/octopus-validate
Version:
表单校验库
248 lines (191 loc) • 7.25 kB
text/typescript
/**
* Validates a regular expression pattern.
* @param rule 占位
* 一、集合汇总-正则校验规则
*
* const validateStrategy = {
* 策略名: 校验规则
* 策略名: 动态校验规则名称: function 动态校验名称() {
// 动态校验规则
},
* }
*
*/
const OcStrategy = (function validateStrategy() {
return {
/**
* 校验名称
* 规则描述
* @param 参数描述
*/
/*
* 数字相关
*/
//正数(可含小数、0)
posiNum: /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/,
//正整数
posiInt: /^[1-9]\d*$/,
//0或正整数
posiInt0: /^(0|[1-9][0-9]*)$/,
//2位的数字
numLen2: /^[0-9]{2}$/,
// 2-3位的数字:
numLen2or3: /^\d{1,3}$/,
// 非零开头的最多带两位小数的正数:
posiFloat2: /^([1-9][0-9]*)+(\.[0-9]{1,2})?$/,
// 带1-2位小数的正数或负数:
float1or2: /^(\-)?\d+(.\d{1,2})?$/,
// 非零的负整数:
negativeInt: /^-[1-9]\d*$/,
// 负数或0:
negative0: /^-[1-9]\d*|0$/,
// 负整数或0:
negativeInt0: /^(-[1-9]\d*|0)$/,
// 负浮点数:
negativeFloat: /^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/,
// 正浮点数:
posiFloat: /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/,
// 浮点数:
float: /^(-?\d+)(\.\d+)?$/,
/*
* 字符相关
*/
// 英文和数字:
numEn: /^[A-Za-z0-9]+$/,
// 长度为2-4的所有字符:
en2to4: /^.{2,4}$/,
// 英文字母:
En: /^[A-Za-z]+$/,
// 大写英文字母:
EN: /^[A-Z]+$/,
// 小写英文字母:
en: /^[a-z]+$/,
// 小写英文字母:
cn: /^[\u4E00-\u9FA5A]+$/,
// 数字、字母、下划线
numEn_: /^\w+$/,
// 中文、英文、数字、下划线:
numEnCn_: /^[\u4E00-\u9FA5A-Za-z0-9_]+$/,
// 中文、英文、数字:
numEnCn: /^[\u4E00-\u9FA5A-Za-z0-9]+$/,
// 中文、英文
nameEn:/^([\u4E00-\uFA29]|[a-zA-Z])+$/,
// 纯中文
CN: /[\u4E00-\u9FA5]/,
// 校验是否含有中文逗号,
illegalCn:/,|^,|,$/,
// 含有^%&',;=?$\”等字符:
illegal: /[^%&',;=?$\x22]+/,
// 存在空格
hasSpace: /\s+/g,
// Email地址:
email: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
// 护照:
passport: /^1[45][0-9]{7}|G[0-9]{8}|P[0-9]{7}|S[0-9]{7,8}|D[0-9]+$/,
// 手机号码:
mobile: /^1[34578]\d{9}$/,
// 座机号码:
telephone: /0\d{2,3}-\d{5,9}|0\d{2,3}-\d{5,9}/,
// 座机或手机号:
teleMobile: /^((0\d{2,3}-\d{5,9}|0\d{2,3}-\d{5,9})|(1[34578]\d{9}))$/,
// 身份证号(15位、18位数字):
idCard:
/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[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])$)$/,
// 日期: 2017-1-1或2017/1/1
date: /^\d{4}(-|\/)\d{1,2}(-|\/)\d{1,2}$/,
// 时间: 10:00:00
time: /^([01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d$/,
// 日期+时间: 2017-1-1 10:00:00
datetime:
/^\d{4}(-|\/)\d{1,2}(-|\/)\d{1,2}\s([01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d$/,
// 一年的12个月(01~09和1~12):
month: /^(0?[1-9]|1[0-2])$/,
// 一个月的31天(01~09和1~31):
day: /^((0?[1-9])|((1|2)[0-9])|30|31)$/,
//腾讯QQ号:
qq: /[1-9][0-9]{4,}/,
//中国邮政编码:
postcode: /[1-9]\d{5}(?!\d)/,
//IP地址:
ip: /\d+\.\d+\.\d+\.\d+/,
//域名:
url: /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*([\?&]\w+=\w*)*/,
//域名(http开头):
urlHttp: /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/,
// 车牌:
licencePlate: /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/,
//银行卡:
bankCardNum: /^([1-9]{1})(\d{15}|\d{18})$/,
/**
* 小区名称
* 以大写字母[A-Z]、小写字母[a-z]、数字[0-9]、点号[.]、括号[()][{}]、分号[;]、下滑线[_]、减号[-]
* 及特殊字符[%]、[@]组成
*/
condoReg: /^[ A-Za-z0-9.(){};%@_-]*$/,
/**
* 手机号
* 国内(宽松):只要是13,14,15,16,17,18,19开头即可
* 新加坡: 8或者9开头,后面7位数
* @param {string} country 国家,目前支持新加坡和国内,默认国内
*/
phoneReg: function (country) {
if (country === 'Singapore') {
return /(8|9)\d{7}/
}
return /^[1][3,4,5,6,7,8,9][0-9]{9}$/
},
/**
* 1至n个小数位数
* @param {number} n 小数位数
*/
checkFloat: function (n) {
return new RegExp(`^([1-9]+[\d]*(.[0-9]{1,${n}})?)$`)
},
/**
* n位小数
* @param {number} n 小数位数
*/
checkFloatLen: function (n) {
return new RegExp(`^([1-9]+[\d]*(.[0-9]{${n}})?)$`)
},
/**
* n个字符串长度
* @param {number} n 字符串长度
*/
checkStrLenMax: function (n) {
return new RegExp(`^.{${n}}$`)
},
/**
* n 个以上字符串长度
* @param {number} n 字符串最小长度
*/
checkStrLenMin: function (n) {
return new RegExp(`^.{${n},}$`)
},
/**
* m至n个字符串长度
* @param {number} m 字符串最小长度
* @param {number} n 字符串最大长度
*/
checkStrLength: function (m, n) {
return new RegExp(`^.{${m},${n}}$`)
},
/**
* 文件拓展名校验
* @param {Array} arr 支持的文件类型 ['jpg', 'png', 'txt']
*/
checkFileName: function (arr) {
arr = arr.map(name => `.${name}`).join('|')
return new RegExp(`(${arr})$`)
},
/**
* 密码强度校验,必须包含字母、数字、特称字符
* @param {number} min 密码长度至少min个字符
* @param {number}} max 密码长度最多max个字符
*/
checkPassword: function (min, max) {
return new RegExp(`(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{${min},${max}}`)
},
};
})();
export default OcStrategy