1 Star 0 Fork 0

上善若水 / webUtil

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
validate.js 10.62 KB
一键复制 编辑 原始数据 按行查看 历史
上善若水 提交于 2023-10-26 05:34 . update validate.js.
/**
* @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 validMap = ['admin', 'editor']
return validMap.indexOf(str.trim()) >= 0
}
/**
* 姓名
* @param val 当前值字符串
* @returns 返回 true: 姓名正确
*/
export function validFullName(val) {
// false: 姓名不正确
if (!/^[\u4e00-\u9fa5]{1,6}(·[\u4e00-\u9fa5]{1,6}){0,2}$/.test(val)) return false
// true: 姓名正确
else return true
}
/**
* @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) {
/* eslint-disable */
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)
}
/**
* IP地址
* @param val 当前值字符串
* @returns 返回 true: IP地址正确
*/
export function validIPAddress(val) {
const reg = /^(\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])$/
// true: IP地址正确
return reg.test(val)
}
/**
* 车牌号
* @param val 当前值字符串
* @returns 返回 true:车牌号正确
*/
export function validCarNum(val) {
const reg = /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/
return reg.test(val)
}
/**
* 邮政编码
* @param val 当前值字符串
* @returns 返回 true: 邮政编码正确
*/
export function validPostalCode(val) {
const reg = /^[1-9][0-9]{5}$/
return reg.test(val)
}
/**
* @param {string} str
* @returns {Boolean}
*/
export function isString(str) {
return Object.prototype.toString.call(arg) === '[object String]'
}
/**
* @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 obj
* @returns {Boolean}
*/
export function isObject(obj) {
return Object.prototype.toString.call(obj) === '[object Object]'
}
// -----------------------------------------------------后加
/* 省,直辖市代码表 */
const provinceAndCitys = {
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: '新疆',
81: '香港',
82: '澳门',
83: '台湾',
91: '国外'
}
/* 每位加权因子 */
const powers = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2']
/* 第18位校检码 */
const parityBit = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
/* 校验地址码 */
const checkAddressCode = function (addressCode) {
let check = /^[1-9]\d{5}$/.test(addressCode)
if (!check) return false
if (provinceAndCitys[addressCode.substring(0, 2)]) {
return true
}
return false
}
/* 校验日期码 */
const checkBirthDayCode = function (birDayCode) {
let check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode)
if (!check) return false
let yyyy = parseInt(birDayCode.substring(0, 4), 10)
let mm = parseInt(birDayCode.substring(4, 6), 10)
let dd = parseInt(birDayCode.substring(6), 10)
let xdata = new Date(yyyy, mm - 1, dd)
if (xdata > new Date()) {
return false // 生日不能大于当前日期
}
if (xdata.getFullYear() == yyyy && xdata.getMonth() == mm - 1 && xdata.getDate() == dd) {
return true
}
return false
}
/* 校验15位的身份证号码 */
const check15IdCardNo = function (idCardNo) {
// 15位身份证号码的基本校验
let check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo)
if (!check) return false
// 校验地址码
let addressCode = idCardNo.substring(0, 6)
check = checkAddressCode(addressCode)
if (!check) return false
let birDayCode = `19${idCardNo.substring(6, 12)}`
// 校验日期码
return checkBirthDayCode(birDayCode)
}
/* 计算校检码 */
const getParityBit = function (idCardNo) {
let id17 = idCardNo.substring(0, 17)
/* 加权 */
let power = 0
for (let i = 0; i < 17; i++) {
power += parseInt(id17.charAt(i), 10) * parseInt(powers[i])
}
/* 取模 */
let mod = power % 11
return parityBit[mod]
}
/* 验证校检码 */
const checkParityBit = function (idCardNo) {
let parityBit = idCardNo.charAt(17).toUpperCase()
if (getParityBit(idCardNo) == parityBit) {
return true
}
return false
}
/* 校验18位的身份证号码 */
const check18IdCardNo = function (idCardNo) {
// 18位身份证号码的基本格式校验
let check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo)
if (!check) return false
// 校验地址码
let addressCode = idCardNo.substring(0, 6)
check = checkAddressCode(addressCode)
if (!check) return false
// 校验日期码
let birDayCode = idCardNo.substring(6, 14)
check = checkBirthDayCode(birDayCode)
if (!check) return false
// 验证校检码
return checkParityBit(idCardNo)
}
/**
* 校验15位或18位的身份证号码
* @param {*} idCardNo - 身份证号码
* @returns true/false
*/
export const regIdCard = function (idCardNo) {
// 15位和18位身份证号码的基本校验
let check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo)
if (!check) return false
// 判断长度为15位或18位
if (idCardNo.length == 15) {
return check15IdCardNo(idCardNo)
}
if (idCardNo.length == 18) {
return check18IdCardNo(idCardNo)
}
return false
}
/**
* @description: 香港居民身份证
* @param {*} str
* @return {*}
*/
export const StringIsHongKongTXZ = (str) => {
if (!str.trim()) return false
// const re = new RegExp(/^([Hh]\d{8})$/);
// const re = new RegExp(/^[A-Z]\d{6}\([\dA]\)$/);
// return re.test(str);
return true
}
/**
* @description: 澳门居民身份证
* @param {*} str
* @return {*}
*/
export const StringIsMacaoTXZ = (str) => {
if (!str.trim()) return false
// const re = new RegExp(/^([Mm]\d{8})$/);
// const re = new RegExp(/[1|5|7][0-9]{6}\([0-9]\)/);
// const re = new RegExp(/^[1|5|7]\d{6}[(\d)]{3}$/);
// return re.test(str);
return true
}
/**
* @description: 护照
* @param {*} str
* @return {*}
*/
export const StringIsPassport = (str) => {
if (!str?.trim()) return false
let re = new RegExp(/^([A-Za-z0-9]{1,})$/)
return re.test(str)
}
/**
* @description: 来往大陆通行证(台湾居民)
* @param {*} str
* @return {*}
*/
export const StringIsTaiWanTXZ = (str) => {
if (!str?.trim()) return false
let reT = new RegExp(/^\d{8}$/)
let reA = new RegExp(/^([Mm]\d{8})$/)
let reX = new RegExp(/^([Hh]\d{8})$/)
let res = reT.test(str) || reA.test(str) || reX.test(str)
return res
}
/**
* 大于0的整数
* @param {string} str
* @returns {Boolean}
*/
export function greaterThanZeroNumber(str) {
const value = str + ''
if (!value?.trim()) return false
const re = new RegExp(/^[1-9]\d*$/g)
return re.test(value)
}
/**
* 大于等于0的整数
* @param {string} str
* @returns {Boolean}
*/
export function isEqualOrGreaterThanZero(str) {
const value = str + ''
if (!value?.trim()) return false
const re = new RegExp(/^(0|[1-9][0]*)$/)
return re.test(value)
}
/**
* 手机验证号
*/
export const validMobilePhone = (str) => {
if (!str?.trim()) return false
const re = new RegExp(/^[1][3-9][0-9]{9}$/g)
return re.test(str)
}
/**
* @description: 人名是否是中文校验
* @param {*} str
* @return {*}
*/
export const StringIsCNName = (str) => {
if (!str?.trim()) return false
let re = /[^\u4e00-\u9fa5 | ·]/
if (re.test(str)) return false
return true
}
/**
* 用户名校验
*/
export const StringloginName = (str) => {
if (!str?.trim()) return false
const re = new RegExp(/^[a-zA-Z0-9]{1,16}$/g)
return re.test(str)
}
/**
* @description: 证件号码验证的时候,先进行替换,替换空格和特殊字符
* @param {*} str
* @return {*}
*/
export const CleanCertNo = (str) => {
str.replace(/\s+/g, '')
let strOrigin = '1234567890《》()[]{},;:?‘“-+'
let strMap = '1234567890<>()[]{},;.:?\'"-+'
for (let i = 0; i < strOrigin.length; i++) {
str = str.replace(strOrigin[i], strMap[i])
}
return str
}
/**
* @description: 密码必须包含字母(不区分大小写)、数字、特殊字符,至少8个字符,最多18个字符
* @param {*} str
* @return {*}
*/
export const pwdRegex = (str) => {
if (!str?.trim()) return false
let re = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,18}$')
return re.test(str)
}
/**
* 判断是否为整数类型
* @returns {boolean}
* @param obj any
*/
export const isInteger = (obj) => {
return typeof obj === 'number' && obj % 1 === 0
}
/**
* 判断是否为json数据格式
* @returns {boolean}
* @param str json字符串
*/
export function isJSON(str) {
if (typeof str === 'string') {
try {
let obj = JSON.parse(str)
return !!(typeof obj === 'object' && obj)
} catch (e) {
console.error('error:' + str + '!!!' + e)
return false
}
}
console.warn('It is not a string!')
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/me888/webUtil.git
git@gitee.com:me888/webUtil.git
me888
webUtil
webUtil
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891