layout | title | categories | description | keywords |
---|---|---|---|---|
post |
常用工具方法总结 |
JavaScript |
常用工具方法总结 |
utils |
常用工具方法总结。
export const comdify = n => {
// 千分制
n = '' + n;
let isMinus = false;
if (n.startsWith('-')) {
isMinus = true;
n = n.slice(1);
}
const re = /\d{1,3}(?=(\d{3})+$)/g;
const n1 = n.replace(/^(\d+)((\.\d+)?)$/, function(s, s1, s2) {
return s1.replace(re, '$&,') + s2;
});
return isMinus ? '-' + n1 : n1;
};
// 常用正则验证
const checkStr = (str, type) => {
switch (type) {
case 'phone': //手机号码
return /^1\d{10}$/.test(str)
case 'tel': // 座机
return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str)
case 'card': // 身份证
return /^\d{15}|\d{18}$/.test(str)
case 'pwd': // 密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
return /^[a-zA-Z]\w{5,17}$/.test(str)
case 'postal': // 邮政编码
return /[1-9]\d{5}(?!\d)/.test(str)
case 'QQ': // QQ号 5-11位数字
return /^[1-9]\d{4,10}$/.test(str)
case 'email': // 邮箱
return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str)
case 'money': // 金额(小数点2位)
return /^\d*(?:\.\d{0,2})?$/.test(str)
case 'URL': // 网址
return /(https?|ftp):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
case 'IP': // IP
return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str)
case 'day': // 一个月的31天 01-09和1~31
return /^((0?[1-9])|(([12])[0-9])|30|31)$/.test(str)
case 'month': // 一年的12个月 01-09和1-12
return /^(0?[1-9]|1[0-2])$/.test(str)
case 'date': // 日期时间
return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/.test(str)
case 'poInteger': // 整数 正整数
return /^\d+$/.test(str)
case 'integer': // 整数 正整数或负整数
return /^-?\d+$/.test(str)
case 'decimal': // 小数
return /^(-?\d+)(\.\d+)?$/.test(str)
case 'english': // 英文
return /^[a-zA-Z]+$/.test(str)
case 'chinese': // 中文
return /^[\u4E00-\u9FA5]+$/.test(str)
case 'cname': // 中文姓名 2-4位汉字
return /^[\u4E00-\u9FA5]{2,4}$/.test(str)
case 'lower': // 小写
return /^[a-z]+$/.test(str)
case 'upper': // 大写
return /^[A-Z]+$/.test(str)
case 'HTML': // HTML标记
return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str)
default:
throw new Error('检验出错 in function checkStr')
}
}
// 说明:现在已经出现了16开头的手机号,原正则`/^1[3,4,5,7,8][0-9]{9}$/`不再适用
function isTel(value) {
return /^1[3,4,5,6,7,8,9][0-9]{9}$/.test(value.toString());
}
// 去除字符串两边的空格 trim
String.prototype.trim = function() {
return this.replace(/(^\s+)\|(\s+$)/g, '')
}
// 找出重复最多的字符
let str = 'asss23sjdssskssa7lsssdkjsssdss'
const repeatMost = (str) => {
const arr = str.split(/\s*/) // 把字符串转换为数组
const str2 = arr.sort().join('') // 首先进行排序,这样结果会把相同的字符放在一起,然后再转换为字符串
let value = ''
let index = 0
str2.replace(/(\w)\1*/g, function($0, $1) { // 匹配字符
if (index < $0.length) {
index = $0.length // index是出现次数
value = $1 // value是对应字符
}
})
console.log(`最多的字符: ${value} ,重复的次数: ${index}`)
}
repeatMost(str)
// 数字格式化,1234567890 -> 1,234,567,890
const numFormat = str => str.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
// 手机号中间四位换*
const validateMobile = str => /^[1][0-9]{10}$/.test(str) && str.replace(/(\d{3})(\d{4})(\d{4})/, (rs, $1, $2, $3) => `${$1}****${$3}`)
// 取URL中query到一个对象中
function getUrlParam(str) {
const result = {}
const valid = /(https?|ftp):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.exec(str)
if (!valid) return
const [rs, $1, $2, $3] = valid
$3.match(/[a-zA-Z_]+=[^=&?]*/g).forEach(val => val.replace(/^(\w+)=(\w*)$/, ($0, $1, $2) => {
result[$1] = $2
})
)
return result
}
getUrlParam('https://www.baidu.com?name=jawil&age=23&d=') // {name: "jawil", age: "23", d: ""}
// 验证是否是合法URL
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)
}
// HTML编码,对< / > " & \等字符转义,避免XSS攻击
function htmlEncode(str) {
return str.replace(/[\<\>\"\'\&]/g, function(rs) {
switch (rs) {
case '<':
return '<'
case '>':
return '>'
case '&':
return '&'
case ''':
return '''
case '"':
return '"'
}
})
}
JS 活学活用正则表达式{:target='_blank'}
- 8000 字总结的前端常用 60 余种工具方法{:target='_blank'}
- JavaScript工具函数大全{:target='_blank'}