聊一聊常用正则表达式

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

 [[411317]]

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

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

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

数据过滤

手机号码隐藏中间4位

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

保留两位小数

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

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

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

银行尾号四位数

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

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

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

获取Url携带的地址参数

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

金额以元和万元为单位

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

隐藏证件号

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

用户姓名脱敏

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

账号4位一空格

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

字符全局替换

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

数据验证

手机号验证

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

姓名校验

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

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

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

身份证号完整校验

  1. //   * 身份证号完整校验 
  2. // * ***/ 
  3. isvalidateIdnumber(value) { 
  4.   if (value.length == 18) { 
  5.     var Errors = new Array( 
  6.       "验证通过!"
  7.       "身份证号码位数不对!"
  8.       "身份证号码出生日期超出范围或含有非法字符!"
  9.       "身份证号码校验错误!"
  10.       "身份证地区非法!" 
  11.     ); 
  12.     var area = { 
  13.       11: "北京"
  14.       12: "天津"
  15.       13: "河北"
  16.       14: "山西"
  17.       15: "内蒙古"
  18.       21: "辽宁"
  19.       22: "吉林"
  20.       23: "黑龙江"
  21.       31: "上海"
  22.       32: "江苏"
  23.       33: "浙江"
  24.       34: "安徽"
  25.       35: "福建"
  26.       36: "江西"
  27.       37: "山东"
  28.       41: "河南"
  29.       42: "湖北"
  30.       43: "湖南"
  31.       44: "广东"
  32.       45: "广西"
  33.       46: "海南"
  34.       50: "重庆"
  35.       51: "四川"
  36.       52: "贵州"
  37.       53: "云南"
  38.       54: "西藏"
  39.       61: "陕西"
  40.       62: "甘肃"
  41.       63: "青海"
  42.       64: "宁夏"
  43.       65: "新疆"
  44.       71: "台湾"
  45.       81: "香港"
  46.       82: "澳门"
  47.       91: "国外" 
  48.     }; 
  49.     //身份证号码  idcard 
  50.     var Y; //为身份证号码所有数字经过特定算法以后对11取余所得到的数值 
  51.     var JYM; //固定数值 校验码的计算中会用到 
  52.     var S; //身份证号码所有数字经过特定算法以后所得到的值 
  53.     var M; //校验位数值 
  54.     var idcard_array = value.split(""); 
  55.     var ereg; 
  56.     //console.log(idcard_array); 
  57.     //地区检验 
  58.     if (area[parseInt(value.substr(0, 2))] == null) { 
  59.       // $.fn.validatebox.defaults.rules.IDNumber.message = Errors[4]; 
  60.       console.log(Errors[4]); 
  61.       return false
  62.     } 
  63.  
  64.  
  65.     if (parseInt(value.substr(6, 4)) % 4 == 0 || (parseInt(value.substr(6, 4)) % 100 == 0 && parseInt(value.substr(6, 4)) % 4 == 0)) { 
  66.       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]$/; 
  67.       //闰年出生日期的合法性正则表达式 
  68.     } else { 
  69.       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]$/; 
  70.       //平年出生日期的合法性正则表达式 
  71.     } 
  72.     if (ereg.test(value)) { //测试出生日期的合法性 
  73.       //计算校验位 
  74.       S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + 
  75.         (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + 
  76.         (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + 
  77.         (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + 
  78.         (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + 
  79.         (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + 
  80.         (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + 
  81.         parseInt(idcard_array[7]) * 1 + 
  82.         parseInt(idcard_array[8]) * 6 + 
  83.         parseInt(idcard_array[9]) * 3; 
  84.       Y = S % 11; 
  85.       M = "F"
  86.       JYM = "10X98765432"
  87.       M = JYM.substr(Y, 1); //判断校验位 身份证最后一位为校验位 如果身份证号码正确 则最后一位会与M值相同 
  88.       if (M == idcard_array[17]) { 
  89.         return true
  90.       } else { 
  91.         console.log(Errors[3]); 
  92.         return false
  93.       } 
  94.     } else { 
  95.       console.log(Errors[3]); 
  96.       return false
  97.     } 
  98.   } else { 
  99.     console.log("身份证号码长度不对"); 
  100.     return false
  101.   } 
  102. }, 

只能输入数字和字母

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

校验特殊字符

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

 

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

2018-09-27 15:25:08

正则表达式前端

2009-06-24 11:24:23

JavaScript验正则表达式

2020-09-04 09:16:04

Python正则表达式虚拟机

2023-09-04 15:52:07

2011-11-23 11:04:41

BGPAS_PATH正则表达式

2024-09-14 09:18:14

Python正则表达式

2019-04-30 11:15:51

正则表达式JS前端

2016-11-10 16:21:22

Java 正则表达式

2009-09-16 17:15:57

正则表达式引擎

2023-09-13 08:12:45

2022-01-04 11:35:03

Linux Shel正则表达式Linux

2010-03-03 10:51:32

正则表达式

2010-03-25 18:25:36

Python正则表达式

2011-06-02 12:34:16

正则表达式

2019-07-17 15:45:47

正则表达式字符串前端

2009-02-18 09:48:20

正则表达式Java教程

2017-05-12 10:47:45

Linux正则表达式程序基础

2009-09-16 18:19:34

正则表达式组

2021-01-27 11:34:19

Python正则表达式字符串

2022-03-28 06:19:14

正则表达式开发
点赞
收藏

51CTO技术栈公众号