wft-utils
Version:
The commonly used tool functions in daily development
421 lines (386 loc) • 10.3 kB
JavaScript
/**
* 邮箱
* @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];
}