export const getQueryString = (name: any) => {
let url = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
let newUrl = window.location.search.substr(1).match(url);
if (newUrl != null) {
return unescape(newUrl[2]);
} else {
return false;
}
};
/**
* 判断字符是否为空
* @param value
* @returns {boolean}
*/
export const isEmpty = (value: any) => {
if (
value === undefined ||
value === null ||
value === "" ||
value === "null"
) {
return true;
}
return false;
};
/**
* 判断字符是否不为空
* @param value
* @returns {boolean}
*/
export const isNotEmpty = (value: any) => {
return !isEmpty(value);
};
// 判断是否为微信内置浏览器
export const isWeiXin = () => {
try {
let ua = window.navigator.userAgent.toLowerCase();
return ua.indexOf("micromessenger") !== -1;
} catch (e) {
return false;
}
};
/**
* 时间格式化
* @returns {string|*}
* @param value
* @param formatVal
*/
export function dateFormat(
value: string | number | Date | null | undefined,
formatVal: string
) {
if (value === undefined || value === null || value === "") {
return "";
}
let dt;
if (value instanceof Date) {
dt = value;
} else {
dt = new Date(value);
}
return formatDate(dt, formatVal);
}
export function datetimeString2DateString(datetimeString: {
replace: (arg0: RegExp, arg1: string) => string | number | Date;
}) {
let d = new Date(datetimeString.replace(/\s/, "T"));
return dateFormat(d, "yyyy-MM-dd");
}
export function formatDate(date: Date, fmt: string) {
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
(date.getFullYear() + "").substr(4 - RegExp.$1.length)
);
}
let o = {
"M+": date.getMonth() + 1,
"d+": date.getDate(),
"h+": date.getHours(),
"m+": date.getMinutes(),
"s+": date.getSeconds()
};
for (let k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
// @ts-ignore
let str = o[k] + "";
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1 ? str : padLeftZero(str)
);
}
}
return fmt;
}
function padLeftZero(str: string) {
return ("00" + str).substr(str.length);
}
/**
* 合并对象
* @param obj
* @param options
* @returns {*}
*/
export const merge = (obj, options) => {
if (obj && options) {
for (let p in options) {
if (typeof obj[p] === "object" && typeof options[p] === "object") {
merge(obj[p], options[p]);
} else {
obj[p] = options[p];
}
}
}
return obj;
};
/**
* @param {String|Number} value 要验证的字符串或数值
* @param {*} validList 用来验证的列表
*/
export function oneOf(value, validList) {
for (let i = 0; i < validList.length; i++) {
if (value === validList[i]) {
return true;
}
}
return false;
}
/**
* @description 绑定事件 on(element, event, handler)
*/
export const on = (function() {
try {
if (document.addEventListener) {
return function(element, event, handler) {
if (element && event && handler) {
element.addEventListener(event, handler, false);
}
};
} else {
return function(element, event, handler) {
if (element && event && handler) {
element.attachEvent("on" + event, handler);
}
};
}
} catch (e) {
return false;
}
})();
/**
* @description 解绑事件 off(element, event, handler)
*/
export const off = (function() {
try {
if (document.removeEventListener) {
return function(element, event, handler) {
if (element && event) {
element.removeEventListener(event, handler, false);
}
};
} else {
return function(element, event, handler) {
if (element && event) {
element.detachEvent("on" + event, handler);
}
};
}
} catch (e) {
return false;
}
})();
/**
* 如果返回值浮点型,保留几位小数
* @returns {number|*}
*/
export function floatFormat(value, deci) {
if (!deci) deci = 2;
return parseFloat(value.toFixed(deci));
}
/**
* 购买金额精度处理
* @param num1
* @param num2
* @param p:精度
*/
export function multi(num1, num2, p) {
let scale = Math.pow(10, p);
return (num1 * scale * (num2 * scale)) / (scale * scale);
}
/**
* 校验手机号
* @param phoneNum
*/
export function isLegalPhoneNumber(phoneNum: any) {
const reg = /^\d{7,11}$/;
return reg.test(phoneNum);
}
/**
* 校验邮箱
* @param email
*/
export function isLegalEmail(email: any) {
const reg = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
return reg.test(email);
}
/**
* 校验表情
*/
export function isExpression(expression: any) {
const reg = /[^\u0020-\u007E\u00A0-\u00BE\u2E80-\uA4CF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF\u0080-\u009F\u2000-\u201f\u2026\u2022\u20ac\r\n]/g;
return reg.test(expression);
}
/**
* 按空格截取字符串,获取第一个空格之前
* @returns {string|*}
*/
export function spliceStringPre(val) {
return val.trim().split(" ")[0];
}
/**
* 将数字转换为汉字,十万以内
* @param section
* @returns {string}
* @constructor
*/
export function sectionToChinese(section) {
let chnNumChar = [
"零",
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九"
];
let chnUnitChar = ["", "十", "百", "千", "万", "亿", "万亿", "亿亿"];
let strIns = "",
chnStr = "";
let unitPos = 0;
let zero = true;
while (section > 0) {
let v = section % 10;
if (v === 0) {
if (!zero) {
zero = true;
chnStr = chnNumChar[v] + chnStr;
}
} else {
zero = false;
strIns = chnNumChar[v];
strIns += chnUnitChar[unitPos];
chnStr = strIns + chnStr;
}
unitPos++;
section = Math.floor(section / 10);
}
return chnStr;
}
// base64 编码和解码方法
export const Base64 = {
encode(str) {
return btoa(
encodeURIComponent(str).replace(
/%([0-9A-F]{2})/g,
function toSolidBytes(match, p1) {
//@ts-ignore
return String.fromCharCode("0x" + p1);
}
)
);
},
decode(str) {
return decodeURIComponent(
atob(str)
.split("")
.map(function(c) {
return (
"%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)
);
})
.join("")
);
}
};
/*
* 设备检验
*/
export function _isMobile() {
return navigator.userAgent.match(
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
);
}
/**
* @description 数字转化称对应的字母,1->A
*/
export function numToChapter(value: number) {
return String.fromCharCode(value + 64);
}
/**
* 处理文本的标签和样式
*/
export function formatStr(str) {
return str.replace(/<\/?.+?\/?>/g, "")
}
/**
*
*/
export function generateVisitorId() {
function randomNum(Min, Max) {
var Range = Max - Min;
var Rand = Math.random();
return Min + Math.round(Rand * Range);
}
return new Date().getTime() + "-" + randomNum(100000, 999999);
}
/**
* 吐司提示
*/
export const toast = (str, time = 2000) => {
var dom = document.createElement('div')
var toast = document.getElementById('toast-temporary')
if (toast) {
toast.innerText = str
} else {
dom.style = 'position:fixed;z-index:100003;left:50%;top:45%;transition:all .5s;font-size: 16px;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);-o-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);text-align:center;border-radius:5px;color:#FFF;background:rgba(17,17,17,0.7);line-height:1.75;padding:8px 15px;'
dom.id = 'toast-temporary'
dom.innerText = str
document.body.appendChild(dom)
setTimeout(function () {
document.body.removeChild(dom)
}, time)
}
}
/**
* 获取URL参数
*/
export const parseUrlSearch = () => {
return location.search.replace(/(^\?)|(&$)/g, "").split("&").reduce((t, v) => {
const [key, val] = v.split("=");
t[key] = decodeURIComponent(val);
return t;
}, {});
}
/**
* 全局监听图片加载失败
* <img avatar src="xxx"/>
*/
document.addEventListener('error', function (e) {
var elem = e.target
// 监听头像加载失败
if (elem.tagName.toLowerCase() === 'img' && elem.hasAttribute('avatar')) {
elem.src = 'default img'
}
}, true)
/**
* 金额三位间隔
*/
export const interval = key => {
key += "";
let x = key.split(".");
let x1 = x[0];
let x2 = x.length > 1 ? "." + x[1] : "";
let reg = /(\d+)(\d{3})/;
while (reg.test(x1)) {
x1 = x1.replace(reg, "$1" + "," + "$2");
x2 = x2.replace(reg, "$1" + "," + "$2");
}
return x1 + x2;
};
/**
* 号码隐私保护
*/
export const phoneChange = (str) => {
return str.substring(0, 3) + '****' + str.substring(str.length - 4);
}
/**
* 防抖
* fn 需要防抖的函数
* delay 间隔时间
* type 执行方式 type true 立即执行 false 延迟执行
*/
export const debounce = (fn, delay) => {
var enterTime = 0;
var gapTime = delay || 300;
return function () {
var context = this;
var backTime = new Date();
if (backTime - enterTime > gapTime) {
fn.call(context, arguments);
enterTime = backTime;
}
};
}
export const debounce = (fn, delay, type = true) => {
let timer = null
return function (...args) {
timer && clearTimeout(timer)
type && !timer && fn.apply(this, args)
timer = setTimeout(() => {
timer = null
!type && fn.apply(this, args)
}, delay)
};
}
/*
* 节流
*/
export const throttle = (fn, delay) => {
var enterTime = 0;
var gapTime = delay || 300;
return function () {
var context = this;
var backTime = new Date();
if (backTime - enterTime > gapTime) {
fn.call(context, arguments);
enterTime = backTime;
}
};
}
export const throttle = (fn, delay, type = true) => {
let timer = null
return function (...args) {
if (!timer) {
timer = setTimeout(() => {
timer = null
!type && fn.apply(this, args)
}, delay)
type && fn.apply(this, args)
}
};
}
/**
* 身份证
*/
export const validIdCard = (str) => {
const reg = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/
return reg.test(str)
}
/*
*合法url
*/
export const validateURL = (textval) => {
const urlregex = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/
return urlregex.test(textval)
}
/*
* 文字转base64图片
*/
export const textToImg = (name) => {
const num = parseInt(Math.random() * 100)
const w = 96
const h = 96
const can = document.createElement('canvas')
can.width = w
can.height = h
const _ctxt = can.getContext('2d')
ctxt.fillStyle = '#fff'
_ctxt.fillRect(0, 0, w, h)
_ctxt.font = 'bolder 40px 宋体'
_ctxt.fillStyle = '#000'
_ctxt.textAlign = 'center'
_ctxt.textBaseline = 'middle'
_ctxt.fillText(name, w / 2, h / 2)
return can.toDataURL()
}
公共方法tools
于 2021-12-29 10:49:56 首次发布