/** * @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'), `${val}`); // 返回结果 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(); } }; }