前言
正则表达式一直都是前端或后端的重中之重,如何用最优雅的代码实现项目的要求也是值得我们好好学习深究的,本篇文章先列举几个常用的表达式,以后有时间还会继续更新。
一、判断手机号&&把手机号中间四位变为*
// 判断是否为11位数手机号
function isPhoneNumber(tel) {
let reg =/^1[3-8]\d{9}$/;
return reg.test(tel);
}
// 中间四位变为*
function filterPhone(tel){
return tel.toString().replace(/(\d{3})(\d{4})(\d{4})/,"$1****$3");
}
console.log(filterPhone(13632888888));//136****8888
二、判断银行卡号&&更改卡号的展示&&把银行卡号除开头和结尾部分变为*(银行卡号长度不一定)
银行卡号就简单的判断长度在16-19了,如果要增加规则也不难,相信小伙伴们都可以做到;
// 判断银行卡号是否合规
function checkBankCard(card){
return /^\d{16,19}$/.test(card);
}
这个格式我查过我写的正则是最简单快速且复用性高的,不信小伙伴们可以查查别人写的;
// 把银行卡号改为每四位就插入-,要插入空格就换成空格
function filterBankCard(card){
return card.toString().replace(/(\d{4})/g,"$1-").replace(/-$/,'');
}
console.log(filterBankCard(‘66451125998465472347’));//6645-1125-9984-6547-2347
// 把银行卡号除了开头和结尾的四位数,中间的数字全部变为*号
function filterBankCard2(card){
return card.toString().replace(/^(\d{4})(\d*)(\d{4})$/,(rs,$1,$2,$3)=>{return `${$1} ${$2.replace(/\d/g,"*")} ${$3}`});
}
console.log(filterBankCard2('6645112599846547234'));//6645 *********** 7234
三、把数字的整数部分变为每隔三位用逗号分隔
例如:123456789.1234 转为 123,456,789.1234,1234567899.12345 转为 1,234,567,899.12345;
写法有两种,第一种:纯手写正则
// 第一种,纯手写正则
function numSplit(num) {
// 一开始先转字符串,然后使用replace,正则设置两个规则,$1是读取前面所有整数,$2是读取小数点及后面的数
return num.toString().replace(/(\d+)(.\d)/g, (rs,$1,$2)=> {
// 这里再设置一个规则,把前面读取到的所有整数进行分割,?=是正向前瞻,及?=为必须存在的条件,也就是\d每个整数后面必须有后三位整数,满足了才给拼接,
return $1.replace(/(\d)(?=(\d{3})+$)/g, (rs,$1)=> {
return $1 + ",";
}) + $2;//这里再把前面的.数字拼接回去
})
}
// console.log(numSplit(123456789.1234));//123,456,789.1234
// console.log(numSplit(8123456789.1234));//8,123,456,789.1234
第二种,利用toLocaleString,toLocaleString能自动帮我们把整数部分转为逗号拼接,但是小数部分还得自己处理
function numSplit2(num) {
return num.toString().replace(/(\d+)(.\d)/g, (rs,$1,$2)=> {
$1.toLocaleString() + $2;
});
}
// console.log(numSplit(123456789.1234));//123,456,789.1234
// console.log(numSplit(8123456789.1234));//8,123,456,789.1234
四、邮箱验证
规则:以数字字母开头,中间可以是多个数字字母或下划线,然后@后面是数字字母,最后是.加2-4个字母结尾
function checkEmail(email){
let reg =/^[a-zA-Z0-9]\w*@[a-zA-Z0-9]+.[a-zA-Z]{2,4}$/;
return reg.test(email);
}
console.log(checkEmail('104413fsdfd@qq.com'));//true
如果做国际邮箱校验,要支持其他各种符号,可以将\w换成[!#$%^&*...]来做严谨性判断,具体看业务需求,项目经理会告诉我们规则,稍微改改就行。
五、密码验证
规则:长度为8-16位,最少必须包含一个英文字母、数字、特殊字符
function checkPassword(pass) {
return /^.{8,16}$/.test(pass) && /\d/g.test(pass) && /[a-zA-Z]/g.test(pass) && /[~!@#$%^&*()_+|<>,.?/:;'\\\[\]{}\"]/g.test(pass)
}
let pass = '@4s324!#546';
console.log(checkPassword(pass));//true
或:
const reg = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[~!@#$%^&*()_+|<>,.?/:;'\\[\]{}"])[A-Za-z\d\S]{6,18}$/;
如果是Java验证用下面的:
String content = "!87434566Zxd";
System.out.println(content.matches("[\\w~!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]{8,16}") && Pattern.compile("[a-zA-Z]").matcher(content).find() && Pattern.compile("\\d").matcher(content).find() && Pattern.compile("[~!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]").matcher(content).find());
或:
public static class CheckPassword {
public static boolean checkPasswordRule(String password) {
if (password == null || (password.length() < 8 && password.length() > 16)) return false;
return Pattern.compile("[a-zA-Z]").matcher(password).find() && Pattern.compile("\\d").matcher(password).find() && Pattern.compile("[~!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]").matcher(password).find();
}
}
总结
本次分享了我们公司项目中常用的几个正则判断,下次再整理其他一些经典的正则判断给大家,如果小伙伴们有需要的,也可以把你想实现的规则私信或留言给我,我下次整理好了一起发出。