Skip to content

Latest commit

 

History

History
163 lines (152 loc) · 5.68 KB

2020-05-15-utils.md

File metadata and controls

163 lines (152 loc) · 5.68 KB
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 '&lt;'
      case '>':
        return '&gt;'
      case '&':
        return '&amp;'
      case ''':
        return '&apos;'
      case '"':
        return '&quot;'
    }
  })
}

JS 活学活用正则表达式{:target='_blank'}

前端常用工具方法