聊一聊常用正則表達(dá)式
作者:誰在花里胡哨
提供日常開發(fā)中的一些js處理數(shù)據(jù)的方法,包括對(duì)數(shù)據(jù)的過濾,以及對(duì)數(shù)據(jù)的驗(yàn)證等。也希望大家能留下你好用的方法~~
本文轉(zhuǎn)載自微信公眾號(hào)「網(wǎng)羅開發(fā)」,作者誰在花里胡哨。轉(zhuǎn)載本文請(qǐng)聯(lián)系網(wǎng)羅開發(fā)公眾號(hào)。
提供日常開發(fā)中的一些js處理數(shù)據(jù)的方法,包括對(duì)數(shù)據(jù)的過濾,以及對(duì)數(shù)據(jù)的驗(yàn)證等。也希望大家能留下你好用的方法~~
- 數(shù)據(jù)過濾
- 手機(jī)號(hào)碼隱藏中間4位
- 保留兩位小數(shù)
- 每三位逗號(hào)隔開,后面補(bǔ)兩位小數(shù),多用于金額數(shù)字
- 銀行尾號(hào)四位數(shù)
- 數(shù)字金額轉(zhuǎn)換為大寫人民幣漢字的方法
- 獲取Url攜帶的地址參數(shù)
- 金額以元和萬元為單位
- 隱藏證件號(hào)
- 用戶姓名脫敏
- 賬號(hào)4位一空格
- 字符全局替換
- 數(shù)據(jù)驗(yàn)證
- 手機(jī)號(hào)驗(yàn)證
- 姓名校驗(yàn)
- 密碼必須為8-18位數(shù),且包含大小寫字母和特殊符號(hào)
- 身份證號(hào)完整校驗(yàn)
- 只能輸入數(shù)字和字母
- 校驗(yàn)特殊字符
數(shù)據(jù)過濾
手機(jī)號(hào)碼隱藏中間4位
- //手機(jī)號(hào)碼隱藏中間4位
- phoneHideMiddle(val) {
- if (val) {
- return `${val.substring(0, 3)}****${val.substring(val.length - 4)}`
- }
- else {
- return "";
- }
- }
保留兩位小數(shù)
- //保留兩位小數(shù)
- keepTwoNum(val) {
- val = Number(val);
- return val.toFixed(2);
- },
每三位逗號(hào)隔開,后面補(bǔ)兩位小數(shù),多用于金額數(shù)字
- //每三位逗號(hào)隔開,后面補(bǔ)兩位小數(shù),多用于金額數(shù)字
- floatThree(value) {
- // console.log(value)
- value = "" + value;
- if (!value) return '0.00';
- // var intPart = Number(value).toFixed(0); //獲取整數(shù)部分
- var intPart = parseInt(Number(value));//獲取整數(shù)部分
- // console.log('intPart',intPart)
- var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); //將整數(shù)部分逢三一斷
- // console.log('intPartFormat',intPartFormat)
- var floatPart = ".00"; //預(yù)定義小數(shù)部分
- var value2Array = value.split(".");
- //=2表示數(shù)據(jù)有小數(shù)位
- if (value2Array.length == 2) {
- floatPart = value2Array[1].toString(); //拿到小數(shù)部分
- // console.log('floatPart',floatPart)
- if (floatPart.length == 1) { //補(bǔ)0,實(shí)際上用不著
- return intPartFormat + "." + floatPart + '0';
- } else {
- return intPartFormat + "." + floatPart;
- }
- } else {
- return intPartFormat + floatPart;
- }
- },
銀行尾號(hào)四位數(shù)
- //銀行尾號(hào)四位數(shù)
- bankCardNumLastFour(val) {
- // val = Number(val);
- if (val) {
- return val.substring(val.length - 4);
- }
- },
數(shù)字金額轉(zhuǎn)換為大寫人民幣漢字的方法
- //數(shù)字金額轉(zhuǎn)換為大寫人民幣漢字的方法
- convertCurrency(money) {
- //漢字的數(shù)字
- var cnNums = new Array('零', '壹', '貳', '叁', '肆', '伍', '陸', '柒', '捌', '玖');
- //基本單位
- var cnIntRadice = new Array('', '拾', '佰', '仟');
- //對(duì)應(yīng)整數(shù)部分?jǐn)U展單位
- var cnIntUnits = new Array('', '萬', '億', '兆');
- //對(duì)應(yīng)小數(shù)部分單位
- var cnDecUnits = new Array('角', '分', '毫', '厘');
- //整數(shù)金額時(shí)后面跟的字符
- var cnInteger = '整';
- //整型完以后的單位
- var cnIntLast = '元';
- //最大處理的數(shù)字
- var maxNum = 999999999999999.9999;
- //金額整數(shù)部分
- var integerNum;
- //金額小數(shù)部分
- var decimalNum;
- //輸出的中文金額字符串
- var chineseStr = '';
- //分離金額后用的數(shù)組,預(yù)定義
- var parts;
- if (money == '') { return ''; }
- money = parseFloat(money);
- if (money >= maxNum) {
- //超出最大處理數(shù)字
- return '';
- }
- if (money == 0) {
- chineseStr = cnNums[0] + cnIntLast + cnInteger;
- return chineseStr;
- }
- //轉(zhuǎn)換為字符串
- money = money.toString();
- if (money.indexOf('.') == -1) {
- integerNum = money;
- decimalNum = '';
- } else {
- parts = money.split('.');
- integerNum = parts[0];
- decimalNum = parts[1].substr(0, 4);
- }
- //獲取整型部分轉(zhuǎn)換
- 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;
- }
- //小數(shù)部分
- 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;
- },
獲取Url攜帶的地址參數(shù)
- //獲取Url攜帶的地址參數(shù)
- 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;
- },
金額以元和萬元為單位
- //金額以元和萬元為單位
- moneyConvert(num) {
- var newNum = Number(num);
- if (10000 <= newNum) {
- return (newNum / 10000) + '萬元'
- } else {
- return newNum + '元'
- }
- },
隱藏證件號(hào)
- //隱藏證件號(hào)
- certIdHide(val) {
- if (val) {
- var certId = val.substring(0, 1) + '****************' + val.substring(val.length - 1)
- return certId
- }
- },
用戶姓名脫敏
- //用戶姓名脫敏
- 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
- }
- }
- },
賬號(hào)4位一空格
- //賬號(hào)4位一空格
- accountNumberSpace(val) {
- if (val) {
- return val.replace(/\s/g, "")
- .replace(/\D/g, "")
- .replace(/(\d{4})(?=\d)/g, "$1 ");
- }
- }
字符全局替換
- //字符全局替換
- res.data.content = res.data.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto" ')
數(shù)據(jù)驗(yàn)證
手機(jī)號(hào)驗(yàn)證
- // 手機(jī)號(hào)驗(yàn)證
- isvalidPhone(str) {
- const reg = /^1\d{10}$/
- return reg.test(str)
- },
姓名校驗(yàn)
- //姓名校驗(yàn)
- isUserName(name) {
- if (name && name.length > 1) {
- const reg = name.match(/^[\u4e00-\u9fa5]+$/)
- return Boolean(reg)
- }
- return false
- },
密碼必須為8-18位數(shù),且包含大小寫字母和特殊符號(hào)
- //密碼必須為8-18位數(shù),且包含大小寫字母和特殊符號(hào)
- /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!~@#$%^&*,\.])[0-9a-zA-Z!~@#$%^&*,\\.]{8,18}$/
身份證號(hào)完整校驗(yàn)
- // * 身份證號(hào)完整校驗(yàn)
- // * ***/
- isvalidateIdnumber(value) {
- if (value.length == 18) {
- var Errors = new Array(
- "驗(yàn)證通過!",
- "身份證號(hào)碼位數(shù)不對(duì)!",
- "身份證號(hào)碼出生日期超出范圍或含有非法字符!",
- "身份證號(hào)碼校驗(yàn)錯(cuò)誤!",
- "身份證地區(qū)非法!"
- );
- var area = {
- 11: "北京",
- 12: "天津",
- 13: "河北",
- 14: "山西",
- 15: "內(nèi)蒙古",
- 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: "臺(tái)灣",
- 81: "香港",
- 82: "澳門",
- 91: "國外"
- };
- //身份證號(hào)碼 idcard
- var Y; //為身份證號(hào)碼所有數(shù)字經(jīng)過特定算法以后對(duì)11取余所得到的數(shù)值
- var JYM; //固定數(shù)值 校驗(yàn)碼的計(jì)算中會(huì)用到
- var S; //身份證號(hào)碼所有數(shù)字經(jīng)過特定算法以后所得到的值
- var M; //校驗(yàn)位數(shù)值
- var idcard_array = value.split("");
- var ereg;
- //console.log(idcard_array);
- //地區(qū)檢驗(yàn)
- 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]$/;
- //閏年出生日期的合法性正則表達(dá)式
- } 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]$/;
- //平年出生日期的合法性正則表達(dá)式
- }
- if (ereg.test(value)) { //測試出生日期的合法性
- //計(jì)算校驗(yàn)位
- 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); //判斷校驗(yàn)位 身份證最后一位為校驗(yàn)位 如果身份證號(hào)碼正確 則最后一位會(huì)與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("身份證號(hào)碼長度不對(duì)");
- return false;
- }
- },
只能輸入數(shù)字和字母
- //只能輸入數(shù)字和字母
- isvalidateLetterAndNum(str) {
- const reg = /^[0-9a-zA-Z]+$/;
- console.log(reg.test(str));
- return reg.test(str)
- },
校驗(yàn)特殊字符
- // 校驗(yàn)特殊字符
- 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
- }
- }
責(zé)任編輯:武曉燕
來源:
網(wǎng)羅開發(fā)