以下是一些 JavaScript 中常用的规则校验或过滤方法

数据过滤

手机号码隐藏中间4位

function phoneHideMiddle(val) {
if (val) {
return `${val.substring(0, 3)}****${val.substring(val.length - 4)}`
}
else {
return "";
}
}

保留两位小数

function keepTwoNum(val) {
val = Number(val);
return val.toFixed(2);
}

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

function 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;
}
}

银行尾号四位数

function bankCardNumLastFour(val) {
// val = Number(val);
if (val) {
return val.substring(val.length - 4);
}
}

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

function 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;
}

获取Url携带的地址参数

function 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;
}

金额以元和万元为单位

function moneyConvert(num) {
var newNum = Number(num);
if (10000 <= newNum) {
return (newNum / 10000) + '万元'
} else {
return newNum + '元'
}
}

隐藏证件号

function certIdHide(val) {
if (val) {
var certId = val.substring(0, 1) + '****************' + val.substring(val.length - 1)
return certId
}
}

用户姓名脱敏

function 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
}
}
}

账号4位一空格

function 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" ')

日期格式化

function dateFormat(fmt, date) {
let ret;
const opt = {
"Y+": date.getFullYear().toString(), // 年
"m+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"H+": date.getHours().toString(), // 时
"M+": date.getMinutes().toString(), // 分
"S+": date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};
return fmt;
}

let date = new Date()
dateFormat("YYYY-mm-dd HH:MM", date)

数据验证

手机号验证

function isvalidPhone(str) {
const reg = /^1\d{10}$/
return reg.test(str)
}

姓名校验

function isUserName(name) {
if (name && name.length > 1) {
const reg = name.match(/^[\u4e00-\u9fa5]+$/)
return Boolean(reg)
}
return false
}

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

/^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!~@#$%^&*,\.])[0-9a-zA-Z!~@#$%^&*,\\.]{8,18}$/

* 身份证号完整校验

function 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;
}
}

只能输入数字和字母

function isvalidateLetterAndNum(str) {
const reg = /^[0-9a-zA-Z]+$/;
console.log(reg.test(str));
return reg.test(str)
}

校验特殊字符

function 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
}
}