185 lines
4.5 KiB
JavaScript
185 lines
4.5 KiB
JavaScript
/**
|
|
* @Description: 验证
|
|
* @Author: zenghua.wang
|
|
* @Date: 2022-01-25 21:08:52
|
|
* @LastEditors: zenghua.wang
|
|
* @LastEditTime: 2024-01-26 22:22:58
|
|
*/
|
|
/**
|
|
* @param {string} path
|
|
* @returns {Boolean}
|
|
*/
|
|
export function isExternal(path) {
|
|
return /^(https?:|mailto:|tel:)/.test(path);
|
|
}
|
|
|
|
/**
|
|
* @param {string} str
|
|
* @returns {Boolean}
|
|
*/
|
|
export function validUsername(str) {
|
|
const valid_map = ['admin', 'editor'];
|
|
return valid_map.indexOf(str.trim()) >= 0;
|
|
}
|
|
|
|
/**
|
|
* @param {string} url
|
|
* @returns {Boolean}
|
|
*/
|
|
export function validURL(url) {
|
|
const reg =
|
|
/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
|
|
return reg.test(url);
|
|
}
|
|
|
|
/**
|
|
* @param {string} str
|
|
* @returns {Boolean}
|
|
*/
|
|
export function validLowerCase(str) {
|
|
const reg = /^[a-z]+$/;
|
|
return reg.test(str);
|
|
}
|
|
|
|
/**
|
|
* @param {string} str
|
|
* @returns {Boolean}
|
|
*/
|
|
export function validUpperCase(str) {
|
|
const reg = /^[A-Z]+$/;
|
|
return reg.test(str);
|
|
}
|
|
|
|
/**
|
|
* @param {string} str
|
|
* @returns {Boolean}
|
|
*/
|
|
export function validAlphabets(str) {
|
|
const reg = /^[A-Za-z]+$/;
|
|
return reg.test(str);
|
|
}
|
|
|
|
/**
|
|
* @param {string} email
|
|
* @returns {Boolean}
|
|
*/
|
|
export function validEmail(email) {
|
|
const reg =
|
|
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
return reg.test(email);
|
|
}
|
|
|
|
/**
|
|
* @param {string} str
|
|
* @returns {Boolean}
|
|
*/
|
|
export function isString(str) {
|
|
if (typeof str === 'string' || str instanceof String) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param {Array} arg
|
|
* @returns {Boolean}
|
|
*/
|
|
export function isArray(arg) {
|
|
if (typeof Array.isArray === 'undefined') {
|
|
return Object.prototype.toString.call(arg) === '[object Array]';
|
|
}
|
|
return Array.isArray(arg);
|
|
}
|
|
|
|
/**
|
|
* 手机号码
|
|
* @param val 当前值字符串
|
|
* @returns 返回 true: 手机号码正确
|
|
*/
|
|
export function verifyPhone(val) {
|
|
// false: 手机号码不正确
|
|
if (!/^((12[0-9])|(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0|1,5-9]))\d{8}$/.test(val)) return false;
|
|
// true: 手机号码正确
|
|
else return true;
|
|
}
|
|
|
|
/**
|
|
* 匹配文字变色(搜索时)
|
|
* @param val 当前值字符串
|
|
* @param text 要处理的字符串值
|
|
* @param color 搜索到时字体高亮颜色
|
|
* @returns 返回处理后的字符串
|
|
*/
|
|
export function verifyTextColor(val, text = '', color = 'red') {
|
|
// 返回内容,添加颜色
|
|
const v = text.replace(new RegExp(val, 'gi'), `<span style='color: ${color}'>${val}</span>`);
|
|
// 返回结果
|
|
return v;
|
|
}
|
|
|
|
/**
|
|
* 身份证号, 支持1/2代(15位/18位数字)
|
|
* @param val 当前值字符串
|
|
* @returns 返回 true: 身份证正确
|
|
*/
|
|
export function verifyIdCard(val) {
|
|
const regx = /(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/;
|
|
return regx.test(val);
|
|
}
|
|
|
|
/**
|
|
* 网址
|
|
* @param val 当前值字符串
|
|
* @returns 返回 true: 网址正确
|
|
*/
|
|
export function verifyWebsite(val) {
|
|
const regx = /^((https?|ftp):\/\/)?([\da-z.-]+)\.([a-z.]{2,6})(\/\w\.-]*)*\/?/;
|
|
return regx.test(val);
|
|
}
|
|
|
|
/**
|
|
* 是否html标签
|
|
* @param val 当前值字符串
|
|
* @returns 返回 true: 是否html标签
|
|
*/
|
|
export function verifyHtml(val) {
|
|
const regx = /<(.*)>.*<\/\1>|<(.*) \/>/;
|
|
return regx.test(val);
|
|
}
|
|
|
|
/**
|
|
* 日期
|
|
* @param val 当前值字符串
|
|
* @returns 返回 true: 是否日期
|
|
*/
|
|
export function verifyDate(val) {
|
|
const regx =
|
|
/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
|
|
return regx.test(val);
|
|
}
|
|
|
|
/**
|
|
* 邮箱
|
|
* @param val 当前值字符串
|
|
* @returns 返回 true: 邮箱是否正确
|
|
*/
|
|
export function verifyEmail(val) {
|
|
const regx = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
|
|
return regx.test(val);
|
|
}
|
|
|
|
/**
|
|
* 验证校验器函数封装
|
|
* @param verifyPhone 验证函数
|
|
* @param message 提示
|
|
*/
|
|
export function validatorMethod(verifyPhone, message) {
|
|
return (rule, value, callback) => {
|
|
if (!verifyPhone(value)) {
|
|
callback(new Error(message));
|
|
} else {
|
|
callback();
|
|
}
|
|
};
|
|
}
|