前言
在日常开发中,我们一定遇到过将手机号中间四位
隐藏的需求,今天就来封装两个方法,一个验证是否是手机号
,另一个将手机号中间四位隐藏掉
返回。
过程
了解正则
在解决这个问题之前,我们先来了解一下什么是正则表达式
。
正则表达式
是对一个字符串的一个规则限制
,通常可以使用这个规则来校验一个字符串是否符合规则
,或用来匹配满足规则的字符
,定义一个正则表达式
一般是以 /
开始和结束。
了解手机号
了解完正则之后,我们来了解一下手机号的规则
,在中国大陆,手机号一般是以1
开头的十一位
数字,第二位为3-9
的数字。
编写正则
前面我们说了,正则表达式
一般是以 /
开始和结束,先来定义一个正则
:
const reg = //;
首先来写第一位,一定是以 1
开头,在正则表达式中,以什么开头是以 ^
来决定:
const reg = /^1/;
接下来第二位,是 3-9
的数字,在正则表达式中,以 []
来表示一个区间,3-9
区间可以写成 [3-9]
:
const reg = /^1[3-9]/;
最后是剩下的九位
,是9
个数字,在正则表达式中,用 \d
来表示一个数字,当然也可以使用区间来表示 [0-9]
,重复一个规则 n遍
可以使用 {n}
来表示:
// const reg = /^1[3-9][0-9]{9}/;
const reg = /^1[3-9]\d{9}/;
这里还需要注意一点,九位数字结束之后不能
再有其他字符
了,也就是以九位数字结尾
,在正则表达式中,以什么结尾
可以用$
来决定:
const reg = /^1[3-9]\d{9}$/;
到此为止,一个简单的正则表达式就写完了,为了让它能发挥出作用,这里我们来封装两个方法。
校验手机号
通过传入一个手机号
,返回一个布尔
类型,来校验手机号是否满足规则,主要使用到了正则表达式的test
方法,该方法会返回一个布尔值
,用来校验
传入的字符是否满足指定规则:
const isMobile = (mobile) => {
const reg = /^1[3-9]\d{9}$/;
return reg.test(mobile);
}
isMobile("13111111111") // true
处理手机号
通过 传入一个手机号
,返回一个处理过后的手机号
,主要使用到了JavaScript
的字符串方法replace
,该方法用来替换一个字符串中的部分字符
,第一个参数可以是一个正则表达式,第二个参数是修改之后的字符串
涉及到正则表达式的分组,通过使用一对 ()
来进行分组,使用$n
来读取第n
个分组:
const handleMobile = (mobile) => {
return mobile.replace(/(^1[3-9][0-9])\d{4}(\d{4})$/,`$1****$2`);
}
handleMobile("13111112222") // 131****2222
结语
本文通过一个手机号的校验与处理浅浅讲了一下正则表达式的用法,当然了,对于一个手机号的验证可能不止于此,比如加上区号
等等,但原理都大差不差,需要说明一点,这里的手机号处理尽量在后端处理,前端处理毫无意义
。
我是一名前端程序员,但不止于前端,如果文章对你有所帮助,或者还有什么不同的见解,欢迎评论区讨论,大家一起学习,一起进步~,最后非常感谢你能看到这里。