聊一聊常用正则表达式

开发 前端
提供日常开发中的一些js处理数据的方法,包括对数据的过滤,以及对数据的验证等。也希望大家能留下你好用的方法~~

 [[411317]]

本文转载自微信公众号「网罗开发」,作者誰在花里胡哨。转载本文请联系网罗开发公众号。

提供日常开发中的一些js处理数据的方法,包括对数据的过滤,以及对数据的验证等。也希望大家能留下你好用的方法~~

  • 数据过滤
    • 手机号码隐藏中间4位
    • 保留两位小数
    • 每三位逗号隔开,后面补两位小数,多用于金额数字
    • 银行尾号四位数
    • 数字金额转换为大写人民币汉字的方法
    • 获取Url携带的地址参数
    • 金额以元和万元为单位
    • 隐藏证件号
    • 用户姓名脱敏
    • 账号4位一空格
    • 字符全局替换
  • 数据验证
    • 手机号验证
    • 姓名校验
    • 密码必须为8-18位数,且包含大小写字母和特殊符号
    • 身份证号完整校验
    • 只能输入数字和字母
    • 校验特殊字符

数据过滤

手机号码隐藏中间4位

//手机号码隐藏中间4位 
phoneHideMiddle(val) { 
  if (val) { 
    return `${val.substring(0, 3)}****${val.substring(val.length - 4)}` 
  } 
  else { 
    return ""
  } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

保留两位小数

//保留两位小数 
keepTwoNum(val) { 
  val = Number(val); 
  return val.toFixed(2); 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

每三位逗号隔开,后面补两位小数,多用于金额数字

//每三位逗号隔开,后面补两位小数,多用于金额数字 
floatThree(value) { 
  // console.log(value) 
  value = "" + value; 
  if (!value) return '0.00'
 
  // var intPart = Number(value).toFixed(0); //获取整数部分 
  var intPart = parseInt(Number(value));//获取整数部分 
  // console.log('intPart',intPart) 
  var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); //将整数部分逢三一断 
  // console.log('intPartFormat',intPartFormat) 
 
  var floatPart = ".00"; //预定义小数部分 
  var value2Array = value.split("."); 
 
  //=2表示数据有小数位 
  if (value2Array.length == 2) { 
    floatPart = value2Array[1].toString(); //拿到小数部分 
    // console.log('floatPart',floatPart) 
    if (floatPart.length == 1) { //补0,实际上用不着 
      return intPartFormat + "." + floatPart + '0'
    } else { 
      return intPartFormat + "." + floatPart; 
    } 
 
  } else { 
    return intPartFormat + floatPart; 
  } 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

银行尾号四位数

//银行尾号四位数 
bankCardNumLastFour(val) { 
  // val = Number(val); 
  if (val) { 
    return val.substring(val.length - 4); 
  } 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

数字金额转换为大写人民币汉字的方法

//数字金额转换为大写人民币汉字的方法 
convertCurrency(money) { 
  //汉字的数字 
  var cnNums = new Array('零''壹''贰''叁''肆''伍''陆''柒''捌''玖'); 
  //基本单位 
  var cnIntRadice = new Array('''拾''佰''仟'); 
  //对应整数部分扩展单位 
  var cnIntUnits = new Array('''万''亿''兆'); 
  //对应小数部分单位 
  var cnDecUnits = new Array('角''分''毫''厘'); 
  //整数金额时后面跟的字符 
  var cnInteger = '整'
  //整型完以后的单位 
  var cnIntLast = '元'
  //最大处理的数字 
  var maxNum = 999999999999999.9999; 
  //金额整数部分 
  var integerNum; 
  //金额小数部分 
  var decimalNum; 
  //输出的中文金额字符串 
  var chineseStr = ''
  //分离金额后用的数组,预定义 
  var parts; 
  if (money == '') { return ''; } 
  money = parseFloat(money); 
  if (money >= maxNum) { 
    //超出最大处理数字 
    return ''
  } 
  if (money == 0) { 
    chineseStr = cnNums[0] + cnIntLast + cnInteger; 
    return chineseStr; 
  } 
  //转换为字符串 
  money = money.toString(); 
  if (money.indexOf('.') == -1) { 
    integerNum = money; 
    decimalNum = ''
  } else { 
    parts = money.split('.'); 
    integerNum = parts[0]; 
    decimalNum = parts[1].substr(0, 4); 
  } 
  //获取整型部分转换 
  if (parseInt(integerNum, 10) > 0) { 
    var zeroCount = 0; 
    var IntLen = integerNum.length; 
    for (var i = 0; i < IntLen; i++) { 
      var n = integerNum.substr(i, 1); 
      var p = IntLen - i - 1; 
      var q = p / 4; 
      var m = p % 4; 
      if (n == '0') { 
        zeroCount++; 
      } else { 
        if (zeroCount > 0) { 
          chineseStr += cnNums[0]; 
        } 
        //归零 
        zeroCount = 0; 
        chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; 
      } 
      if (m == 0 && zeroCount < 4) { 
        chineseStr += cnIntUnits[q]; 
      } 
    } 
    chineseStr += cnIntLast; 
  } 
  //小数部分 
  if (decimalNum != '') { 
    var decLen = decimalNum.length; 
    for (var i = 0; i < decLen; i++) { 
      var n = decimalNum.substr(i, 1); 
      if (n != '0') { 
        chineseStr += cnNums[Number(n)] + cnDecUnits[i]; 
      } 
    } 
  } 
  if (chineseStr == '') { 
    chineseStr += cnNums[0] + cnIntLast + cnInteger; 
  } else if (decimalNum == '') { 
    chineseStr += cnInteger; 
  } 
  return chineseStr; 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.

获取Url携带的地址参数

//获取Url携带的地址参数 
GetQueryString(name) { 
  //index.html?token=9b68dd98306327bf&action=2 
  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); 
  if (window.location.search != "") { 
    var r = window.location.search.substr(1).match(reg); 
  } else { 
    if (window.location.hash.indexOf("?") > 0) { 
      var tmp = window.location.hash.split("?"); 
      var r = tmp[1].match(reg); 
    } else { 
      var r = null
    } 
  } 
  if (r != null) { 
    return decodeURI(r[2]); 
  } 
  return null
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

金额以元和万元为单位

//金额以元和万元为单位 
moneyConvert(num) { 
  var newNum = Number(num); 
  if (10000 <= newNum) { 
    return (newNum / 10000) + '万元' 
  } else { 
    return newNum + '元' 
  } 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

隐藏证件号

//隐藏证件号 
certIdHide(val) { 
  if (val) { 
    var certId = val.substring(0, 1) + '****************' + val.substring(val.length - 1) 
    return certId 
  } 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

用户姓名脱敏

//用户姓名脱敏 
userNameHide(val) { 
  if (val) { 
    let name
    if (val.length < 3) { 
      name = '*' + val.substring(val.length - 1) 
      return name 
    } else { 
      name = val.substring(0, 1) + '*' + val.substring(val.length - 1) 
      return name 
    } 
  } 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

账号4位一空格

//账号4位一空格 
accountNumberSpace(val) { 
  if (val) { 
    return val.replace(/\s/g, ""
      .replace(/\D/g, ""
      .replace(/(\d{4})(?=\d)/g, "$1 "); 
  } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

字符全局替换

//字符全局替换 
res.data.content = res.data.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto" '
  • 1.
  • 2.

数据验证

手机号验证

// 手机号验证 
isvalidPhone(str) { 
  const reg = /^1\d{10}$/ 
  return reg.test(str) 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

姓名校验

//姓名校验 
isUserName(name) { 
  if (name && name.length > 1) { 
    const reg = name.match(/^[\u4e00-\u9fa5]+$/) 
    return Boolean(reg) 
  } 
  return false 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

密码必须为8-18位数,且包含大小写字母和特殊符号

//密码必须为8-18位数,且包含大小写字母和特殊符号 
/^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!~@#$%^&*,\.])[0-9a-zA-Z!~@#$%^&*,\\.]{8,18}$/ 
  • 1.
  • 2.

身份证号完整校验

//   * 身份证号完整校验 
// * ***/ 
isvalidateIdnumber(value) { 
  if (value.length == 18) { 
    var Errors = new Array( 
      "验证通过!"
      "身份证号码位数不对!"
      "身份证号码出生日期超出范围或含有非法字符!"
      "身份证号码校验错误!"
      "身份证地区非法!" 
    ); 
    var area = { 
      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: "国外" 
    }; 
    //身份证号码  idcard 
    var Y; //为身份证号码所有数字经过特定算法以后对11取余所得到的数值 
    var JYM; //固定数值 校验码的计算中会用到 
    var S; //身份证号码所有数字经过特定算法以后所得到的值 
    var M; //校验位数值 
    var idcard_array = value.split(""); 
    var ereg; 
    //console.log(idcard_array); 
    //地区检验 
    if (area[parseInt(value.substr(0, 2))] == null) { 
      // $.fn.validatebox.defaults.rules.IDNumber.message = Errors[4]; 
      console.log(Errors[4]); 
      return false
    } 
 
 
    if (parseInt(value.substr(6, 4)) % 4 == 0 || (parseInt(value.substr(6, 4)) % 100 == 0 && parseInt(value.substr(6, 4)) % 4 == 0)) { 
      ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/; 
      //闰年出生日期的合法性正则表达式 
    } else { 
      ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/; 
      //平年出生日期的合法性正则表达式 
    } 
    if (ereg.test(value)) { //测试出生日期的合法性 
      //计算校验位 
      S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + 
        (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + 
        (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + 
        (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + 
        (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + 
        (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + 
        (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + 
        parseInt(idcard_array[7]) * 1 + 
        parseInt(idcard_array[8]) * 6 + 
        parseInt(idcard_array[9]) * 3; 
      Y = S % 11; 
      M = "F"
      JYM = "10X98765432"
      M = JYM.substr(Y, 1); //判断校验位 身份证最后一位为校验位 如果身份证号码正确 则最后一位会与M值相同 
      if (M == idcard_array[17]) { 
        return true
      } else { 
        console.log(Errors[3]); 
        return false
      } 
    } else { 
      console.log(Errors[3]); 
      return false
    } 
  } else { 
    console.log("身份证号码长度不对"); 
    return false
  } 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.

只能输入数字和字母

//只能输入数字和字母 
isvalidateLetterAndNum(str) { 
  const reg = /^[0-9a-zA-Z]+$/; 
  console.log(reg.test(str)); 
  return reg.test(str) 
}, 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

校验特殊字符

// 校验特殊字符 
isSpecialChars(str) { 
  var regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im; 
  var regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im; 
  console.log(regEn.test(str)) 
  if (regEn.test(str) || regCn.test(str)) { 
    return false 
  } else { 
    return true 
  } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

 

责任编辑:武晓燕 来源: 网罗开发
相关推荐

2018-09-27 15:25:08

正则表达式前端

2009-06-24 11:24:23

JavaScript验正则表达式

2020-09-04 09:16:04

Python正则表达式虚拟机

2024-09-14 09:18:14

Python正则表达式

2019-04-30 11:15:51

正则表达式JS前端

2023-09-04 15:52:07

2011-11-23 11:04:41

BGPAS_PATH正则表达式

2010-03-25 18:25:36

Python正则表达式

2021-01-27 11:34:19

Python正则表达式字符串

2009-09-16 18:19:34

正则表达式组

2019-07-17 15:45:47

正则表达式字符串前端

2017-05-12 10:47:45

Linux正则表达式程序基础

2009-02-18 09:48:20

正则表达式Java教程

2011-06-02 12:34:16

正则表达式

2022-03-28 06:19:14

正则表达式开发

2009-09-16 17:15:57

正则表达式引擎

2016-11-10 16:21:22

Java 正则表达式

2023-09-13 08:12:45

2022-01-04 11:35:03

Linux Shel正则表达式Linux

2010-03-03 10:51:32

正则表达式
点赞
收藏

51CTO技术栈公众号