一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情。
导言
本篇列举几个我们开发中常用的正则表达式,也是对前面内容的一种实践。后面有用到直接用就好了,随着时代的发展,像手机号码、身份证号、QQ号等规则都有可能发生变化,后续会持续更新。
常用正则表达式
浮点数
浮点数涉及到正负数、整数、小数,正负号用[+-]?,整数或小数\d+(?:\.\d+)?,0.5还有可能直接表示成.5,负数也可能这么表示。
[+-]*\d*(?:\.\d+)?|
十六进制数
十六进制除了0-9之外,还有A-F(或a-f)来表示10-15,所以正则可以这样写/[0-9A-Fa-f]+/
手机号码
手机号11位数这个是固定的,最不严格的匹配就直接用\d{11},可以更稍微严格一点,限制前2位:
1[3-9]\d{9} // 限制前2位
如上是公开的各运营商号段,我们可以进而限制前3位、前4位甚至前5位,写正则不难,难的是后期维护成本比较高,因为号段经常会变。如果对号码匹配要求不高,就限制前2位即可。
邮政编号
邮编一般是6位数字,可以写成\d{6},但6位数字也可能是别的信息,那我们最好加个断言:
const reg = /\b\d{6}\b/ // 单词边界
const str = '123456'
reg.test(str) // true
身份证号
身份证号有可能是15位或18位,如果是18位,最后一位可能是X/x,并且第1位不能是0
const reg = /[1-9]\d{14}(\d{2}[0-9Xx])?/
const str = '230968200001022345'
reg.test(str) // true
QQ号码
QQ号码最小10000,且第一位不能是0,到目前为止最多10位数:
[1-9]\d{4-9}
邮箱
邮箱的组成比较复杂,格式是用户名@主机名,更具体一点可以是xxx@xxx.xxx
[\w.+-]+@[\w.]+\.[\w.]+
中文字符
中文属于多字节Unicode字符,码值范围是4E00-9FFF,JavaScript中表示Unicode的格式是 \u码值,Python、Java表达方式也相同,PHP略有不同:\u{码值}, 这样来判断是否是中文字符就很简单了
[\u4E00-\u9FFF]]
IPv4
IPv4的格式是xxx.xxx.xxx.xxx,4位数字都用.隔开,每位数字范围是0-255,一般的话,不校验每个数字的大小,主要对格式进行校验。可以简单的写成:
\d{0,3}(\.\d{0,3}){3}
日期
以格式是yyyy-mm-dd为例,月份1-12,并且1月可以表示成1或01,日可以是1-31,1日也可以表示成1或01
\d{4}-(?:0?\d|1[0-2])-(?:[12]\d|3[01]|0?\d|)