123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604 |
- import * as dayjs from "dayjs";
- /**
- * Created by PanJiaChen on 16/11/18.
- */
- function accMulIn(arg1, arg2) {
- let m = 0,
- s1 = arg1.toString(),
- s2 = arg2.toString();
- try {
- m += s1.split(".")[1].length;
- } catch (e) { }
- try {
- m += s2.split(".")[1].length;
- } catch (e) { }
- return (
- (Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /
- Math.pow(10, m)
- );
- }
- /** https
- * @param {string} path
- * @returns {Boolean}
- */
- export function isExternal(path) {
- return /^(https?:|mailto:|tel:)/.test(path);
- }
- //区-座-分
- export function isqzf(s) {
- let type = true;
- let arr = s.split("-");
- if (arr.length === 3) {
- type = setqj(arr[0]) && setzj(arr[1]) && setfj(arr[2]);
- } else {
- type = false;
- }
- console.log("console区-座-分 " + type);
- return type;
- }
- // //区-座
- export function isqz(s) {
- let type = true;
- let arr = s.split("-");
- if (arr.length === 2) {
- type = setqj(arr[0]) && setzj(arr[1]);
- } else {
- type = false;
- }
- console.log("console区-座 " + type);
- return type;
- }
- //座-分
- export function iszf(s) {
- let type = true;
- let arr = s.split("-");
- if (arr.length === 2) {
- type = setzj(arr[0]) && setfj(arr[1]);
- } else {
- type = false;
- }
- console.log("console座-分" + type);
- return type;
- }
- //座
- export function isz(s) {
- let type = true;
- let arr = s.split("-");
- if (arr.length === 1) {
- type = setzj(arr[0]);
- } else {
- type = false;
- }
- console.log("console座" + type);
- return type;
- }
- function setqj(s) {
- return /0\d{2,3}?$/.test(s) && (s.length == 3 || s.length == 4);
- }
- function setzj(s) {
- return /\d{7,8}$/.test(s) && (s.length == 7 || s.length == 8);
- }
- function setfj(s) {
- return /\d{1,6}$/.test(s) && s.length > 0 && s.length < 7;
- }
- /** 用户名
- * @param {string} str
- * @returns {Boolean}
- */
- export function validUsername(str) {
- const valid_map = ["admin", "editor"];
- return valid_map.indexOf(str.trim()) >= 0;
- }
- /** url
- * @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) {
- 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);
- }
- /** 字符串
- * @param {string} str
- * @returns {Boolean}
- */
- export function isString(str) {
- if (typeof str === "string" || str instanceof String) {
- return true;
- }
- return false;
- }
- /** 数组
- * @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 {*} 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 isM(s) || isHK(s);
- }
- // 手机号码
- function isM(s) {
- return /^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(s);
- }
- // 香港手机号码
- function isHK(s) {
- return /^852[3|5|6|8|9]\d{7}$/.test(s);
- }
- /**
- * 电话号码
- * @param {*} s
- */
- export function isPhone(s) {
- return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s);
- }
- /**
- * 微信号
- * @param {*} s
- */
- export function isWeixin(s) {
- return /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/.test(s);
- }
- /**
- * qq号
- * @param {*} s
- */
- export function isQQ(s) {
- return /^[1-9][0-9]{4,14}$/.test(s);
- }
- /**
- * 固定电话(支持分机)
- * @param {*} s
- */
- export function isExtension(s) {
- let type = true;
- let arr = s.split("-");
- // console.log(arr);
- if (arr.length === 2 || arr.length === 3) {
- type = setF(arr);
- } else {
- type = false;
- }
- // console.log('console' + type);
- return type;
- ///0\d{2,3}-\d{7,8}(-\d{1,6})?/.test(s)
- }
- function setF(arr) {
- let type1 = true,
- type2 = true,
- type3 = true;
- type1 = /0\d{2,3}?$/.test(arr[0]);
- type2 =
- arr[1].length === 7 || arr[1].length === 8
- ? /\d{7,8}$/.test(arr[1])
- : false;
- if (arr.length === 3) {
- type3 =
- arr[2].length === 0 || arr[2].length > 6
- ? false
- : /\d{1,6}$/.test(arr[2]);
- }
- // console.log(type1, type2, type3);
- if (arr.length === 2) {
- return type1 && type2;
- } else {
- return type1 && type2 && type3;
- }
- }
- // (^(\d{11})$|^((\d{3}-)?\d{8}(-\d{1,4})?)$|^((\d{4}-)?\d{7}(-\d{1,4})?)$|^(\d{7,8})$)
- /**
- * 纳税人识别号
- * @param {*} s
- */
- export function isLicense(s) {
- return /[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}/.test(s);
- }
- /**
- * 身份证号码
- * @param {*} s
- */
- export function isIDentityCard(s) {
- return /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(
- s
- );
- }
- /**
- * URL地址
- * @param {*} s
- */
- export function isURL(s) {
- return /^http[s]?:\/\/.*/.test(s);
- }
- /**
- * 汉语
- * @param {*} s
- */
- export function isChinese(s) {
- return /[\u4e00-\u9fa5]$/.test(s);
- }
- /**
- * 数字
- * @param {*} s
- */
- export function isnumber(s) {
- return /^[0-9]*$/.test(s);
- }
- /**
- * 数字或者带小数点的数字
- * @param {*} s
- */
- export function isnumber2(s) {
- return /(^[0-9]{1,2}$)|(^[0-9]{1,2}[\.]{1}[0-9]{1,2}$)/.test(s);
- }
- /**
- * 数字或者带小数点的数字 1,2,3位小数
- * @param {*} s
- */
- export function isnumber3(s) {
- return /^(([^0][0-9]+|0)\.([0-9]{1,3})$)|^([^0][0-9]+|0)$/.test(s);
- }
- /**
- * 数字字母
- * @param {*} s
- */
- export function isAlphanumeric(s) {
- return /^[0-9A-Za-z]*$/.test(s);
- }
- /**
- * 数字大写字母
- * @param {*} s
- */
- export function isNumeric(s) {
- return /^[0-9A-Z]*$/.test(s);
- }
- /**
- * 表情包
- * @param {*} s
- */
- export function isEmoticon(s) {
- const reg =
- /[^\u0020-\u007E\u00A0-\u00BE\u2E80-\uA4CF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF\u0080-\u009F\u2000-\u201f\u2026\u2022\u20ac\r\n]/g;
- // console.log(reg.test(s));
- return reg.test(s);
- }
- /**
- * 判断是否为微信浏览器
- * @param {*} s
- */
- export function JudgeEnvironment() {
- const ua = navigator.userAgent.toLowerCase();
- let environment = "";
- const isWeixin = ua.indexOf("micromessenger") != -1;
- if (isWeixin) {
- environment = "Weixin";
- }
- const isWelink = ua.indexOf("huawei-anyoffice") != -1;
- if (isWelink) {
- environment = "Welink";
- }
- const isDingDing = ua.indexOf("dingtalk") != -1;
- if (isDingDing) {
- environment = "isDingDing";
- }
- if (environment === "") {
- environment = "otherBrowser";
- }
- return environment;
- }
- export function timestampToTime(timestamp) {
- const date = new Date(timestamp); // 时间戳为10位需*1000,时间戳为13位的话不需乘1000
- const Y = date.getFullYear() + "-";
- const M =
- (date.getMonth() + 1 < 10
- ? "0" + (date.getMonth() + 1)
- : date.getMonth() + 1) + "-";
- const D = date.getDate() + " ";
- let h = date.getHours();
- h = h < 10 ? `0${h}:` : h + ":";
- let m = date.getMinutes();
- m = m < 10 ? `0${m}:` : m + ":";
- let s = date.getSeconds();
- s = s < 10 ? `0${s}` : s;
- return Y + M + D + h + m + s;
- }
- export function isCreditCode(s) {
- const reg = /[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g;
- return reg.test(s);
- }
- //加法精算
- export function add_sum(arg1, arg2) {
- let r1, r2, m;
- try {
- r1 = arg1.toString().split(".")[1].length;
- } catch (e) {
- r1 = 0;
- }
- try {
- r2 = arg2.toString().split(".")[1].length;
- } catch (e) {
- r2 = 0;
- }
- m = Math.pow(10, Math.max(r1, r2));
- const s = (accMulIn(arg1, m) + accMulIn(arg2, m)) / m;
- return s;
- }
- //乘法精算
- export function accMul(arg1, arg2) {
- const s = accMulIn(arg1, arg2);
- console.log(`${arg1}*${arg2}=${s}`);
- return s;
- }
- //除法精度问题
- export function accDiv(arg1, arg2) {
- let t1 = 0,
- t2 = 0,
- c1,
- c2;
- try {
- t1 = arg1.toString().split(".")[1].length;
- } catch (e) { }
- try {
- t2 = arg2.toString().split(".")[1].length;
- } catch (e) { }
- // with (Math) {
- c1 = Number(arg1.toString().replace(".", ""));
- c2 = Number(arg2.toString().replace(".", ""));
- const s = (c1 / c2) * Math.pow(10, t2 - t1);
- console.log(`${arg1}/${arg2}=${s}`);
- return s;
- }
- //减法精度问题
- // export function accSub(arg1, arg2) {
- // var r1, r2, m, n;
- // try {
- // r1 = arg1.toString().split(".")[1].length;
- // } catch (e) {
- // r1 = 0;
- // }
- // try {
- // r2 = arg2.toString().split(".")[1].length;
- // } catch (e) {
- // r2 = 0;
- // }
- // m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
- // n = r1 >= r2 ? r1 : r2;
- // const s = ((arg1 * m - arg2 * m) / m).toFixed(n);
- // console.log(`${arg1}-${arg2}=${s}`);
- // return s;
- // }
- // export function isSpecialSymbol(s) {
- // // console.log(s);
- // const str = (s ?? "").replace(
- // /\\|\/|\"|\'|\<|\>|\{|\}|\[|\]|\:|\^|\$|\!|\~|\`|\|/g,
- // ""
- // );
- // // console.log(str);
- // const pattern = new RegExp("[`~!@#$^&()=|{}':;',<>/?]");
- // let specialStr = "";
- // for (let i = 0; i < str.length; i++) {
- // specialStr += str.substr(i, 1).replace(pattern, "");
- // }
- // return s.length > specialStr.length;
- // }
- // export function isAddr(s) {
- // let isok = false;
- // const regList = [
- // "多地",
- // "另给",
- // "线下",
- // "地址",
- // "单独给",
- // "内部沟通",
- // "微信",
- // "钉钉",
- // "短信",
- // "文件",
- // "另外",
- // "后面",
- // "以后",
- // "晚点",
- // "后补",
- // "再给",
- // ];
- // for (let i = 0; i < regList.length; i++) {
- // const is = s.includes(regList[i]);
- // if (is) {
- // isok = is;
- // }
- // }
- // const sstr = /^[0-9A-Za-z]*$/;
- // if (sstr.test(s)) {
- // isok = true;
- // }
- // if (!isok) {
- // let reslist = [];
- // let str = "";
- // for (let i = 0; i < s.length; i++) {
- // let isa = sstr.test(s[i]);
- // // console.log(isa);
- // if (isa) {
- // str += s[i];
- // } else {
- // reslist.push(str);
- // str = "";
- // }
- // if (i === s.length - 1) {
- // reslist.push(str);
- // str = "";
- // }
- // }
- // for (let b = 0; b < reslist.length; b++) {
- // if (reslist[b].length > 5) {
- // isok = true;
- // }
- // }
- // }
- // return !isok;
- // }
- export function hasSpace(s) {
- // const str1 = s.replace(/\s/g, "");
- // \a 007 响铃(BEL)
- // \b 008 退格(BS) ,将当前位置移到前一列
- // \f 012 换页(FF),将当前位置移到下页开头
- // \n 010 换行(LF) ,将当前位置移到下一行开头
- // \r 013 回车(CR) ,将当前位置移到本行开头
- // \t 009 水平制表(HT) (跳到下一个TAB位置)
- // \v 011 垂直制表(VT)
- // \\ 092 代表一个反斜线字符''\'
- // \' 039 代表一个单引号(撇号)字符
- // \" 034 代表一个双引号字符
- // \? 063 代表一个问号
- // \0 000 空字符(NUL)
- // \ddd 三位八进制 1到3位八进制数所代表的任意字符 会把数字过滤掉
- // \xhh 十六进制 十六进制所代表的任意字符 会把部分字母过滤掉
- //
- const str2 = s.replace(/[\b\f\n\r\t\v\\\'\"\?\0]/g, "");
- console.log(s);
- console.log(str2);
- return !(str2 === s);
- }
- function com1(str, arr) {
- let s = (arr.find((si) => si.key === str) || {}).value || str;
- return s;
- }
- function com2(str, arr) {
- console.log(str);
- console.log(arr);
- let s = "";
- for (let i = 0; i < str.length; i++) {
- console.log((arr.find((si) => si.key === str[i]) || {}).value || str[i]);
- s += (arr.find((si) => si.key === str[i]) || {}).value || str[i];
- }
- return s;
- }
- //营业执照成立日期大写转小写
- export function invTime(s) {
- s = s.replace(" 00:00:00", "");
- //dayjs(s).format('YYYY-MM-DD')
- const option = [
- { key: "一", value: "1" },
- { key: "二", value: "2" },
- { key: "三", value: "3" },
- { key: "四", value: "4" },
- { key: "五", value: "5" },
- { key: "六", value: "6" },
- { key: "七", value: "7" },
- { key: "八", value: "8" },
- { key: "九", value: "9" },
- ];
- const year = [
- { key: "0", value: "0" },
- { key: "零", value: "0" },
- ].concat(option);
- const day1 = [{ key: "十", value: "10" }].concat(option);
- const day2 = [{ key: "十", value: "1" }];
- let str = ["年", "月", "日"];
- let si = s.replace(/[\r\n]/g, "").replace(/\s/g, "");
- let arr1 = "",
- arr2 = "",
- arr3 = "";
- for (let i = 0; i < str.length; i++) {
- si = si.replace(str[i], i == 2 ? "" : "-");
- }
- let arr = si.split("-");
- if (arr.length !== 3) {
- return s;
- } else {
- arr1 = com2(arr[0], year);
- arr2 =
- arr[1].length > 1 ? com2(arr[1], year.concat(day2)) : com1(arr[1], day1);
- arr3 =
- arr[2].length > 1 ? com2(arr[2], year.concat(day2)) : com1(arr[1], day1);
- return `${arr1 + "-" + arr2 + "-" + arr3}`;
- }
- }
- // /[\u4e00-\u9fa5]|[^\u3002\u4e00-\u9fa5]*/g
- // 要匹配汉字或者汉字加标点符号的字符串,但不匹配标点符号 (中文段落)
- export function ChineseParagraph(s) {
- return !s == s.replace(/[\u4e00-\u9fa5]|[^\u3002\u4e00-\u9fa5]*/g, "");
- }
|