一.过滤器相关工具函数
1.姓名隐私保护
function noPassByName(str) {
if (null != str && str !== undefined) {
if (str.length <= 3) {
return "*" + str.substring(1, str.length);
} else if (str.length > 3 && str.length <= 6) {
return "**" + str.substring(2, str.length);
} else if (str.length > 6) {
return str.substring(0, 2) + "****" + str.substring(6, str.length);
}
} else {
return "";
}
}
功能: 传入姓名(string类型) 返回加密后的名字,根据名字长度,加密长度也会变化
示例: 张三----> *三 伊丽莎白---> **莎白
2.手机号隐私保护
function secrecyMobile(mobile) {
mobile = String(mobile);
if (!/\d{11}/.test(mobile)) {
return mobile;
}
return mobile.replace(/(\d{3})(\d{4})(\d{4})/, "$1****$3");
}
功能: 传入手机号,隐藏中间四位数字,并返回
示例: 13888888888 ---> 138****8888
3.清除逗号
function clearStrComma(str) {
str = str.replace(/,/g, "");
return str;
}
功能: 取消字符串中出现的所有逗号
示例: 我,20岁,男--->我20岁男
二.解析计算相关工具函数
1.解析url参数
function urlParse(url) {
let obj = {};
let reg = /[?&][^?&]+=[^?&]+/g;
let arr = url.match(reg);
if (arr) {
arr.forEach((item) => {
let tempArr = item.substring(1).split("=");
let key = decodeURIComponent(tempArr[0]);
let val = decodeURIComponent(tempArr.splice(1).join("="));
obj[key] = val;
});
}
return obj;
}
功能: 解析url参数,转成对象格式
示例: ?id=12345&a=b--->{id:12345,a:b}
2.计算传秒数的倒计时
function countTimeDown(seconds) {
const leftTime = (time) => {
if (time < 10) time = "0" + time;
return time + "";
};
return {
day: leftTime(parseInt(seconds / 60 / 60 / 24, 10)),
hours: leftTime(parseInt((seconds / 60 / 60) % 24, 10)),
minutes: leftTime(parseInt((seconds / 60) % 60, 10)),
seconds: leftTime(parseInt(seconds % 60, 10)),
};
}
功能: 计算传秒数的倒计时【天、时、分、秒】
示例: countTimeDown(13000)--->{day : '00', hours : '03', minutes : '36', seconds : '40'}
3.计算当前时间到第二天0点的倒计时
function theNextDayTime() {
const nowDate = new Date();
const time =
new Date(
nowDate.getFullYear(),
nowDate.getMonth(),
nowDate.getDate() + 1,
0,
0,
0
).getTime() - nowDate.getTime();
return parseInt(time / 1000);
}
功能: 计算当前时间到第二天0点的倒计时[秒]
示例: theNextDayTime()--->返回到第二天0点位置的秒(number)
三.正则相关工具
- 各种正则表达式
- mobile 手机号
- email 电子邮箱
- password 密码【6-20位】
- integer 正整数【不包含0】
- money 金钱
- TINumber 纳税识别号
- IDCard 身份证
- userName 账户名称【汉字、字母、数字、“-”、“_”的组合】
- URL URL
- TEL 固定电话
// 手机号
export const mobile = /^0?(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])[0-9]{8}$/
// 电子邮箱
export const email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*$/
// 密码【6-20位】
export const password = /^[@A-Za-z0-9!#$%^&*.~,]{6,20}$/
// 正整数【不包含0】
export const integer = /^[1-9]\d*$/
// 正整数【包含0】
export const Integer = /^[0-9]\d*$/
// 金钱
export const money = /(^[1-9]([0-9]+)?(.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9].[0-9]([0-9])?$)/
// 纳税识别号
export const TINumber = /^((\d{6}[0-9A-Z]{9})|([0-9A-Za-z]{2}\d{6}[0-9A-Za-z]{10,12}))$/
// 身份证
export const IDCard = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
// 账户名称【汉字、字母、数字、“-”、“_”的组合】
export const userName = /[A-Za-z0-9_-\u4e00-\u9fa5]$/
// URL
export const URL =
/^(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.,?'\+&%$#=~_-]+))*$/
// 固话
export const TEL = /0\d{2,3}-\d{7,8}/
四.其他工具
1.货币格式化
function formatPrice(price) {
if (typeof price !== "number") return price;
return String(Number(price).toFixed(2)).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
功能: 传入价格进行格式化,每三位加逗号,并保留两位有效数字
示例:formatPrice(1999681)--->1,999,681.00
2.随机生成指定长度的字符串
function randomString(length = 32) {
const chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
const maxPos = chars.length;
let _string = "";
for (let i = 0; i < length; i++) {
_string += chars.charAt(Math.floor(Math.random() * maxPos));
}
return _string;
}
功能: 随机生成指定长度的字符串
示例:randomString(3)--->ZRr (每次随机)
3.验证银行卡号
function checkBankno(bankno) {
var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一位(与luhm进行比较)
var first15Num = bankno.substr(0, bankno.length - 1); //前15或18位
var newArr = [];
for (var i = first15Num.length - 1; i > -1; i--) {
//前15或18位倒序存进数组
newArr.push(first15Num.substr(i, 1));
}
var arrJiShu = []; //奇数位*2的积 <9
var arrJiShu2 = []; //奇数位*2的积 >9
var arrOuShu = []; //偶数位数组
for (var j = 0; j < newArr.length; j++) {
if ((j + 1) % 2 == 1) {
//奇数位
if (parseInt(newArr[j]) * 2 < 9) arrJiShu.push(parseInt(newArr[j]) * 2);
else arrJiShu2.push(parseInt(newArr[j]) * 2);
} //偶数位
else arrOuShu.push(newArr[j]);
}
var jishu_child1 = []; //奇数位*2 >9 的分割之后的数组个位数
var jishu_child2 = []; //奇数位*2 >9 的分割之后的数组十位数
for (var h = 0; h < arrJiShu2.length; h++) {
jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
}
var sumJiShu = 0; //奇数位*2 < 9 的数组之和
var sumOuShu = 0; //偶数位数组之和
var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
var sumTotal = 0;
for (var m = 0; m < arrJiShu.length; m++) {
sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
}
for (var n = 0; n < arrOuShu.length; n++) {
sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
}
for (var p = 0; p < jishu_child1.length; p++) {
sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
}
//计算总和
sumTotal =
parseInt(sumJiShu) +
parseInt(sumOuShu) +
parseInt(sumJiShuChild1) +
parseInt(sumJiShuChild2);
//计算Luhm值
var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
var luhm = 10 - k;
if (lastNum == luhm) {
return true;
} else {
return false;
}
}
功能: 验证银行卡号是否正确,正确返回true,否则false
示例:checkBankno('银行卡号')--->true/false