UNPKG

wft-utils

Version:

The commonly used tool functions in daily development

421 lines (386 loc) 10.3 kB
/** * 邮箱 * @param {*} s */ export function isEmail(s) { return /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/.test(s) } /** * 手机号码 * @param {*} s */ export function isMobile(s) { return /^1[0-9]{10}$/.test(s) } /** * 电话号码 * @param {*} s */ export function isPhone(s) { return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s) } /** * URL地址 * @param {*} s */ export function isURL(s) { return /^http[s]?:\/\/.*/.test(s) } /** * 小写字母 * @param {*} s * @returns */ export function isLowerCase(s) { const reg = /^[a-z]+$/ return reg.test(s) } /** * 大写字母 * @param {*} s * @returns */ export function isUpperCase(s) { const reg = /^[A-Z]+$/ return reg.test(s) } /** * 大小写字母 * @param {*} s * @returns */ export function isAlphabets(s) { const reg = /^[A-Za-z]+$/ return reg.test(s) } /** * 验证pad还是pc * @returns */ export function isPc() { const userAgentInfo = navigator.userAgent const Agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod'] let flag = true for (let v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false break } } return flag } /** * 判断姓名是否正确 * @param {*} name * @returns */ export function isName(name) { let regName = /^[\u4e00-\u9fa5]{2,4}$/ if (!regName.test(name)) return false return true } /** * 判断是否为空 */ export function isNull(val) { if (val instanceof Array) { if (val.length === 0) return true } else if (val instanceof Object) { if (JSON.stringify(val) === '{}') return true } else { if (val === null || val === undefined || val === '') return true return false } return false } /** * 判断身份证号码 */ export function isCardId(code) { let msg = '' const city = { 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 (!isNull(code)) { if (code.length === 18) { if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) { msg = '证件号码格式错误' return false } else if (!city[code.substr(0, 2)]) { msg = '地址编码错误' return false } else { // 18位身份证需要验证最后一位校验位 code = code.split('') // ∑(ai×Wi)(mod 11) // 加权因子 let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] // 校验位 let parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x'] let sum = 0 let ai = 0 let wi = 0 for (let i = 0; i < 17; i++) { ai = code[i] wi = factor[i] sum += ai * wi } let last = parity[sum % 11] if ('' + last !== '' + code[17]) { msg = '证件号码校验位错误' return false } } } else { msg = '证件号码长度不为18位' return false } } else { msg = '证件号码不能为空' return false } if (msg) { console.log(msg) } return true } /** * 校验是否为整数(包含大于0、小于0、等于0) * @param {*} s * @returns */ export function isInteger(s) { return /(^[0-9]+$)|(^-[0-9]+$)/.test(s) } /** * 校验是否为正整数(包含0) * @param {*} s * @returns */ export function isPositiveInteger(s) { return /^[0-9]+$/.test(s) } /** * 校验是否为负整数 * @param {*} s * @returns */ export function isNegativeInteger(s) { return /^-[0-9]+$/.test(s) } /** * 校验是否为小数(包含大于0、小于0) * @param {*} s */ export function isFloat(s) { return /(^[0-9]+.[0-9]+$)|(^-[0-9]+.[0-9]+$)/.test(s) } /** * 校验是否为大于0的小数 * @param {*} s */ export function isPositiveFloat(s) { return /^[0-9]+.[0-9]+$/.test(s) } /** * 校验是否为小于0的小数 * @param {*} s */ export function isNegativeFloat(s) { return /^-[0-9]+.[0-9]+$/.test(s) } /** * 校验只能输入数字(包含整数、小数) * @param {*} value * @returns */ export function isDigits(value) { return isInteger(value) || isFloat(value) } /** * 校验大于等于0的数字(包含整数、浮点数(小数点后5位以内,可按需修改)) * @param {*} s * @returns */ export function isPositiveDigit(s) { return /^(([0-9]|([1-9][0-9]{0,9}))((\.[0-9]{1,5})?))$/.test(s) && parseInt(s) >= 0 } /** * 校验是否为小于0的数字 * @param {*} s */ export function isNegativeDigit(s) { return isNegativeInteger(s) || isNegativeFloat(s) } /* * 判断英文字符 * 只能包含英文字符。 */ export function isEnglish(value) { return /^[A-Za-z]+$/.test(value) } /* * 联系电话(手机/电话皆可)验证 * 请正确填写您的联系方式 */ export function isTel(value) { var length = value.length var mobile = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/ var tel = /^(\d{3,4}-?)?\d{7,9}$/g return tel.test(value) || (length === 11 && mobile.test(value)) } /** * 匹配QQ * @param {*} value * @returns */ export function isQq(value) { return /^[1-9]\d{4,12}$/.test(value) } /* * 邮政编码验证 * 请正确填写您的邮政编码。 */ export function isZipCode(value) { var zip = /^[0-9]{6}$/ return zip.test(value) } /* * 密码中必须包含字母(不区分大小写)、数字、特称字符,至少8个字符,最多30个字符 */ export function isPwd(value) { return /(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,30}/.test(value) } // 中强度密码校验(至少包含大写字母,小写字母,数字,且不少于8位) export function isMedialPwd(str) { return /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/.test(str) } //强强度密码校验(包含大写字母、小写字母、数字、特殊字符的四种缺一不可,长度8到16) export function isStrongPwd(str) { return /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\\W_!@#$%^&*`~()-+=]+$)(?![0-9\\W_!@#$%^&*`~()-+=]+$)(?![a-zA-Z0-9]+$)(?![a-zA-Z\\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9\\W_!@#$%^&*`~()-+=]+$)(?![0-9A-Z\\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\\W_!@#$%^&*`~()-+=]{8,16}$/.test(str) } /* * IP地址验证 * 请填写正确的IP地址。 */ export function ip(value) { return /^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.)(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.){2}([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))$/.test(value) } /* * 字符验证,只能包含中文、英文、数字、下划线等字符。 * 只能包含中文、英文、数字、下划线等字符 */ export function stringCheck(value) { return /^[a-zA-Z0-9\u4e00-\u9fa5-_]+$/.test(value) } /* * 匹配汉字 * 匹配汉字 */ export function isChinese(value) { return /^[\u4e00-\u9fa5]+$/.test(value) } /* * 匹配中文(包括汉字和字符) * 匹配中文(包括汉字和字符) */ export function isChineseChar(value) { return /^[\u0391-\uFFE5]+$/.test(value) } /* * 判断是否为合法字符(a-zA-Z0-9-_) * 判断是否为合法字符(a-zA-Z0-9-_) */ export function isRightfulString(value) { return /^[A-Za-z0-9_-]+$/.test(value) } // 车牌号校验 export function isPlateNo(plateNo) { var re = /^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}$/ if (re.test(plateNo)) { return true } return false } // 十六进制校验 export function isHexString(str) { return /^[0-9a-fA-F]+$/.test(str); } /** * 判断是否为图片base64编码 * @param {*} str * @returns */ export function isDataUrlBase64(str) { const dataUrlRegex = /^data:image\/[^;]+;base64,/; return dataUrlRegex.test(str); } /** * 校验中国邮编是否合法 * @param {string} postalCode - 邮编字符串 * @returns {boolean} - 是否合法 */ export function isChinesePostalCode(postalCode) { // 正则表达式:6位数字 const regex = /^\d{6}$/; return regex.test(postalCode); } /** * 校验给定的日期字符串是否是一个有效的日期。 * 有效日期定义为符合"YYYY-MM-DD"格式,并且代表一个实际存在的公历日期。 * * @param {string} dateString - 要校验的日期字符串,预期格式为"YYYY-MM-DD"。 * @returns {boolean} - 如果日期有效返回true,否则返回false。 */ export function isValidDate(dateString) { // 使用正则表达式检查输入的日期字符串是否符合"YYYY-MM-DD"的基本格式。 // 这里假设年份为四位数,月份和日均为两位数。 if (!/^\d{4}-\d{2}-\d{2}$/.test(dateString)) { return false; // 如果格式不符合要求,直接返回false。 } // 将日期字符串分割成年、月、日三个部分。 var parts = dateString.split('-'); // 创建一个新的Date对象。注意:月份参数需要减1,因为JavaScript中的月份是从0开始计数的。 var date = new Date(parts[0], parts[1] - 1, parts[2]); /** * 检查从Date对象中提取出的年、月、日是否与原始输入的值相匹配。 * 这一步骤可以确保输入的日期是实际存在的日期(例如,不存在31号的月份不会被错误接受)。 */ return date.getFullYear() == parts[0] && date.getMonth() + 1 == parts[1] && // getMonth()返回值范围是0-11,所以需要加1来比较 date.getDate() == parts[2]; }