// 手机号正则表达式 export const phoneReg = /^1\d{10}$/; // 手机号正则表达式(强校验) export const phoneStrongReg = /^(13[0-9]{9})|(15[0-9]{9})|(17[0-9]{9})|(18[0-9]{9})|(19[0-9]{9})$/; // 固话正则表达式 export const telReg = /^(400|800)([0-9\\-]{7,10})|(([0-9]{4}|[0-9]{3})(-| )?)?([0-9]{7,8})((-| |转)*([0-9]{1,4}))?$/; // 邮箱正则表达式 export const emailReg = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; // 网址正则表达式 export const urlReg = /(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/; // 身份证正则表达式 export const identityReg = /(^\d{15}$)|(^\d{17}(x|X|\d)$)/; // 日期正则表达式 export const dateReg = /^(\d{4})[-/](\d{1}|0\d{1}|1[0-2])([-/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/; // 数字正则表达式 export const numberReg = /^[0-9]+\.?[0-9]*$/; // 整数正则表达式 export const integerReg = /^-?\d+$/; // 正整数正则表达式 export const positiveIntegerReg = /^[1-9]\d*$/; // 负整数正则表达式 export const negativeIntegerReg = /^-[1-9]\d*$/; // 非负整数(正整数或0)正则表达式 export const nonNegativeIntegerReg = /^\d+$/; // 非正整数(负整数或0)正则表达式 export const nonPositiveIntegerReg = /^-[1-9]\d*|0/; // 中文正则表达式 export const chineseReg = /^[\u4E00-\u9FA5]{2,4}$/; // 端口号正则表达式 export const portReg = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; // IP正则表达式 export const ipReg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/; // 经度正则表达式, -180.0~+180.0(整数部分为0~180, 必须输入1到5位小数) export const longitudeReg = /^[-|+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/; // 纬度正则表达式, -90.0~+90.0(整数部分为0~90, 必须输入1到5位小数) export const latitudeReg = /^[-|+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$/; /** * 是否是手机号 * @param value * @returns {boolean} */ export function isPhone(value) { return phoneReg.test(value); } /** * 是否是手机号(强校验) * @param value * @returns {boolean} */ export function isPhoneStrong(value) { return phoneStrongReg.test(value); } /** * 是否为固话 * @param value * @returns {boolean} */ export function isTel(value) { return telReg.test(value); } /** * 是否是邮箱 * @param value * @returns {boolean} */ export function isEmail(value) { return emailReg.test(value); } /** * 是否是网址 * @param value * @returns {boolean} */ export function isUrl(value) { return urlReg.test(value); } /** * 是否是身份证 * @param value * @returns {boolean} */ export function isIdentity(value) { return identityReg.test(value); } /** * 是否是日期 * @param value * @returns {boolean} */ export function isDate(value) { return dateReg.test(value); } /** * 是否是数字 * @param value * @returns {boolean} */ export function isNumber(value) { //return !isNaN(value); return numberReg.test(value); } /** * 是否是整数 * @param value * @returns {boolean} */ export function isInteger(value) { return integerReg.test(value); } /** * 是否是正整数 * @param value * @returns {boolean} */ export function isPositiveInteger(value) { return positiveIntegerReg.test(value); } /** * 是否是负整数 * @param value * @returns {boolean} */ export function isNegativeInteger(value) { return negativeIntegerReg.test(value); } /** * 是否是非负整数(正整数或0) * @param value * @returns {boolean} */ export function isNonNegativeInteger(value) { return nonNegativeIntegerReg.test(value); } /** * 是否是非正整数(负整数或0) * @param value * @returns {boolean} */ export function isNonPositiveInteger(value) { return nonPositiveIntegerReg.test(value); } /** * 是否是中文 * @param value * @returns {boolean} */ export function isChinese(value) { return chineseReg.test(value); } /** * 是否是端口号 * @param value * @returns {boolean} */ export function isPort(value) { return portReg.test(value); } /** * 是否是IP * @param value * @returns {boolean} */ export function isIP(value) { return ipReg.test(value); } /** * 是否是经度, -180.0~+180.0(整数部分为0~180, 必须输入1到5位小数) * @param value * @returns {boolean} */ export function isLongitude(value) { return longitudeReg.test(value); } /** * 是否是纬度, -90.0~+90.0(整数部分为0~90, 必须输入1到5位小数) * @param value * @returns {boolean} */ export function isLatitude(value) { return latitudeReg.test(value); } /** * 验证最小长度、最大长度 * @param value * @param minLength * @param maxLength * @returns {boolean} */ export function maxMinLength(value, minLength, maxLength) { if (typeof value === 'undefined' || value === null) { return !minLength; } if (minLength && value.toString().length < minLength) { return false; } return !(typeof maxLength !== 'undefined' && maxLength !== null && value.toString().length > maxLength); } /** * 验证最小值、最大值 * @param value * @param min * @param max * @returns {boolean} */ export function maxMin(value, min, max) { if (typeof value === 'undefined' || value === null) { return typeof min === 'undefined' || min === null; } if (typeof min !== 'undefined' && min !== null && value < min) { return false; } return !(typeof max !== 'undefined' && max !== null && value > max); } /** * 是否是身份证(强校验) * @param value * @returns {string} */ export function isIdentityStrong(value) { if (!isIdentity(value)) { return '身份证号码格式错误'; } const ai = value.length === 18 ? value.substring(0, 17) : value.substring(0, 6) + '19' + value.substring(6, 15); // 验证出生年月 const year = ai.substring(6, 10); // 年 const birthday = year + '/' + ai.substring(10, 12) + '/' + ai.substring(12, 14); if (!isDate(birthday)) { return '身份证号码出生日期无效'; } const now = new Date(); if (now.getFullYear() - parseInt(year) > 150 || now.getTime() - new Date(birthday).getTime() < 0) { return '身份证号码出生日期不在有效范围'; } // 验证地区码 const areaCodes = [ '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', ]; if (areaCodes.indexOf(ai.substring(0, 2)) === -1) { return '身份证号码地区编码错误'; } // 验证最后一位 if (value.length === 18) { const valCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; const wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; let totalMulAiWi = 0; for (let i = 0; i < 17; i++) { totalMulAiWi += parseInt(ai.charAt(i)) * wi[i]; } if (value !== ai + valCode[totalMulAiWi % 11]) { return '身份证号码最后一位错误'; } } }