前端Vue常用JS工具类汇总(可用于真实项目中,亲测可用)
/**
* Created by tanxiaobing on 2021/02/21.
*/
/* 合法uri*/ export function validateURL(textval) { const urlregex = /^(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 urlregex.test(textval) }
/** * 邮箱 * @param {*} s */ export function isEmail(s) { return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,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) }
/* 小写字母*/ export function validateLowerCase(str) { const reg = /^[a-z]+$/ return reg.test(str) }
/* 大写字母*/ export function validateUpperCase(str) { const reg = /^[A-Z]+$/ return reg.test(str) }
/* 大小写字母*/ export function validatAlphabets(str) { const reg = /^[A-Za-z]+$/ return reg.test(str) }
/*验证pad还是pc*/ export const vaildatePc = function () { const userAgentInfo = navigator.userAgent; const Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod" ]; let flag = true; for (var v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; } } return flag; }
/** * 验证 email * @param email * @returns {boolean} */ export function validateEmail(email) { const re = /^(([^<>()\\[\]\\.,;:\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 re.test(email) }
/** * 判断身份证号码 */ export function cardid(code) { let list = []; let result = true; let msg = ''; var 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 (!validatenull(code)) { if (code.length == 18) { if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) { msg = "证件号码格式错误"; } else if (!city[code.substr(0, 2)]) { msg = "地址编码错误"; } else { //18位身份证需要验证最后一位校验位 code = code.split(''); //∑(ai×Wi)(mod 11) //加权因子 var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //校验位 var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x']; var sum = 0; var ai = 0; var wi = 0; for (var i = 0; i < 17; i++) { ai = code[i]; wi = factor[i]; sum += ai * wi; } if (parity[sum % 11] != code[17]) { msg = "证件号码校验位错误"; } else { result = false; } } } else { msg = "证件号码长度不为18位"; } } else { msg = "证件号码不能为空"; } list.push(result); list.push(msg); return list; }
/** * 判断是否为整数 */ export function validatenum(num, type) { let regName = /[^\d.]/g; if (type == 1) { if (!regName.test(num)) return false; } else if (type == 2) { regName = /[^\d]/g; if (!regName.test(num)) return false; } return true; }
/** * 判断是否为小数 */ export function validatenumord(num, type) { let regName = /[^\d.]/g; if (type == 1) { if (!regName.test(num)) return false; } else if (type == 2) { regName = /[^\d.]/g; if (!regName.test(num)) return false; } return true; }
/** * 判断手机号码是否正确 */ export function isvalidatemobile(phone) { let list = []; let result = true; let msg = ''; var isPhone = /^0\d{2,3}-?\d{7,8}$/; //增加134 减少|1349[0-9]{7},增加181,增加145,增加17[678] if (!validatenull(phone)) { if (phone.length == 11) { if (isPhone.test(phone)) { msg = '手机号码格式不正确'; } else { result = false; } } else { msg = '手机号码长度不为11位'; } } else { msg = '手机号码不能为空'; } list.push(result); list.push(msg); return list; }
/** * 判断姓名是否正确 */ export function validatename(name) { var regName = /^[\u4e00-\u9fa5]{2,4}$/; if (!regName.test(name)) return false; return true; }
/** * 判断是否为空 */ export function validatenull(val) { if (typeof val == 'boolean') { return false; } if (typeof val == 'number') { return false; } 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 == null || val == 'undefined' || val == undefined || val == '') return true; return false; } return false; }
/** * 企业信用代码唯一性校验 * @param Code * @returns {boolean} */ export function checkSocialCreditCode(Code) { var patrn = /^[0-9A-Z]+$/; //18位校验及大写校验 if ((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; } else { } return true; } }
/** * 银行卡校验 * @param bankno * @returns {boolean} */ export 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; } }
/** * 根据出生日期计算年龄 * @param strAge * @returns {string|boolean|number} */ export function getAge(strAge) { var birArr = strAge.split("-"); var birYear = birArr[0]; var birMonth = birArr[1]; var birDay = birArr[2]; d = new Date(); var nowYear = d.getFullYear(); var nowMonth = d.getMonth() + 1; //记得加1 var nowDay = d.getDate(); var returnAge; if (birArr == null) { return false } var d = new Date(birYear, birMonth - 1, birDay); if (d.getFullYear() == birYear && (d.getMonth() + 1) == birMonth && d.getDate() == birDay) { if (nowYear == birYear) { returnAge = 0; // } else { var ageDiff = nowYear - birYear; // if (ageDiff > 0) { if (nowMonth == birMonth) { var dayDiff = nowDay - birDay; // if (dayDiff < 0) { returnAge = ageDiff - 1; } else { returnAge = ageDiff; } } else { var monthDiff = nowMonth - birMonth; // if (monthDiff < 0) { returnAge = ageDiff - 1; } else { returnAge = ageDiff; } } } else { return "出生日期晚于今天,数据有误"; //返回-1 表示出生日期输入错误 晚于今天 } } return returnAge; } else { return ("输入的日期格式错误!"); } }
/** *返回校验不通过的第一个元素 * @returns {boolean} */ export function backErrorPosition() { setTimeout(() => { var isError = document.getElementsByClassName("is-error"); isError[0].scrollIntoView({ // 滚动到指定节点 // 值有start,center,end,nearest,当前显示在视图区域中间 block: 'center', // 值有auto、instant,smooth,缓动动画 behavior: 'instant' }); isError[0].querySelector('input').focus(); }, 100); return false; }
有问题请加QQ:1916208605