/**
* 大写首字符
* @param {String} string
*/
export function uppercaseFirst (string) {
return string.charAt(0).toUpperCase() + string.slice(1)
}
/**
* 生成随机ID
*/
export const generateRandId = () => {
return Math.random()
.toString(36)
.substr(-8);
};
/**
* 获取地址栏的参数
* params {String} url
* reutrn { Object }
*/
export const getURLParameters = url =>
(url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(
(a, v) => (
(a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a
),
{}
);
/**
*
* @param { Array } array
* @returns 去重之后的数组
*
*/
export function arrayToHeavy (array) {
for (let i = 0; i < array.length; i++) {
for (let j = i + 1; j < array.length; j++) {
if (array[i] === array[j]) {
array.splice(j, 1);
j--
}
};
}
return array
}
/**
* 数据类型判断
typeof:只能判断number/string/boolean/object/function,不能判断数组(object)
instanceof: 不能判断原始类型数据,它判断的是 A是否是B的实例,原理就是只要右边变量的 prototype在左边变量的原型链上即可。
constructor: 不能判断null和undefined,[].constructor == Array,原始类型需要通过new 定义 才能用constructor判断:new Number(222).constructor == Number
* @param {*} name
* @param {String} type
* @returns { Boolean }
*/
export function diffType (name, type) {
return Object.prototype.toString.call(name) === `[object ${type}]`
}
/**
* 防抖函数
* @param {Function } fn
* @param {Number} delay
*/
export const debounceFn = (fn, delay = 500)=> {
let timer = null
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
fn.apply(this, arguments)
timer = null
}, delay)
}
}
// 验证函数
export $validate = {
/**
* 验证地址
* @author 2022-09-03
* @param {String} path 地址
* @returns {Boolean}
* @example $validate.isExternal('https://zszc.com')
*/
isExternal(path) {
return /^(https?:|mailto:|tel:)/.test(path)
},
/**
* 是否是Number
* @author 2022-09-03
* @param {String|Number} val
* @returns {Boolean}
* @example $validate.isNumber(255)
*/
isNumber(val) {
return /^[0-9]*$/.test(val)
},
/**
* 验证邮箱号
* @author 2022-09-03
* @param {String} val 邮箱号
* @returns {Boolean}
* @example $validate.isEmail('zszc@qq.com')
*/
isEmail(val) {
let reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
return reg.test(val)
},
/**
* 判断手机号是否正确
* @author 2022-09-03
* @param {String} val 手机号
* @returns {Boolean}
* @example $validate.isPhone('15373582236')
*/
isPhone(val) {
let zj = /^0\d{2,3}-?\d{7,8}$/
let sj = /^1(2|3|4|5|6|7|8|9)\d{9}$/
return zj.test(val) || sj.test(val)
},
/**
* 判断是否是图片
* @author 2022-09-03
* @param {String} src 文件地址
* @returns {Boolean}
* @example $validate.isPicture('image.png')
*/
isPicture: function (src) {
let index
if (!src || (index = src.indexOf('.')) === -1) {
return false
}
let pic = ['png', 'jpg', 'jpeg', 'bmp']
let exts = src.substring(index + 1) //文件扩展名
return pic.indexOf(exts) === -1
},
/**
* 验证正数数值的小数位
* @author 2022-09-03
* @param {String|Number} val 需要验证的数值
* @param {String|Number} length 小数长度
* @returns {Boolean}
* @example $validate.decimalPoin(2.33,2)
*/
decimalPoint(val, length) {
let integer = /^\+?((0|([1-9]+\d*))|((0\.\d+)|([1-9]+\d*\.\d+)))$/
let reg = new RegExp(`^\\d+[.]?\\d{0,${length}}$`)
if (!integer.test(val)) {
return false
} else {
return reg.test(val)
}
},
/**
* 验证身份证号
* @author 2022-09-03
* @param {String} code //身份证号
* @returns {boolean}
* @example $validate.IdentityCodeValid('')
*/
IdentityCodeValid(code) {
let 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: '国外 '
}
let tip = ''
let pass = true
if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)) {
tip = '身份证号格式错误'
pass = false
} else if (!city[code.substr(0, 2)]) {
tip = '身份证号地址编码错误'
pass = false
} else {
//18位身份证需要验证最后一位校验位
if (code.length == 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]
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 (parity[sum % 11] != code[17]) {
// tip = "身份证号校验位错误";
pass = false
}
}
}
return pass
},
/**
* 验证统一社会信用代码
* @author 2022-09-03
* @param {String} Code 统一社会信用代码
* @return {Boolean}
* @example $validate.CheckSocialCreditCode('')
*/
CheckSocialCreditCode(Code) {
var patrn = /^[0-9A-Z]+$/
//18位校验及大写校验
if (!Code || Code.length != 18 || patrn.test(Code) == false) {
return false
} else {
var Ancode //统一社会信用代码的每一个值
var Ancodevalue //统一社会信用代码每一个值的权重
var total = 0
var weightedfactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28] //加权因子
var str = '0123456789ABCDEFGHJKLMNPQRTUWXY'
//不用I、O、S、V、Z
for (var i = 0; i < Code.length - 1; i++) {
Ancode = Code.substring(i, i + 1)
Ancodevalue = str.indexOf(Ancode)
total = total + Ancodevalue * weightedfactors[i]
//权重与加权因子相乘之和
}
var logiccheckcode = 31 - (total % 31)
if (logiccheckcode == 31) {
logiccheckcode = 0
}
var Str = '0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y'
var Array_Str = Str.split(',')
logiccheckcode = Array_Str[logiccheckcode]
var checkcode = Code.substring(17, 18)
if (logiccheckcode != checkcode) {
return false
}
return true
}
},
/**
*金额验证
* @author 2022-10-8
* @param {String} value //字段
* @returns {boolean}
* @example $validate.isMoney('')
*/
isMoney(value){
let reg = /^\d+[.]?\d{0,2}$/
return reg.test(value)
},
isEmpty(value){
if(!value){
return false
}else{
return true
}
}
}
实用通用函数
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 通用函数 通用函数(ufunc)是一种对ndarray中对数据执行元素级运算的函数 一元函数 二元函数 数学与统计...
- 1.一元通用函数(unary ufuncs) like sqrt(),exp() 2.二元通用函数 其他一些函数,...
- 电梯直达:Python 科学计算库 NumPy 学习笔记 - 1[//www.greatytc.com/...