常用正则表达式

常用正则

收集开发中的一些常用正则,使用时建议根据实际需求进行修改

由于格式化会在前面添加分号,故采用变量形式

正则表达式应当符合实际需求即可,无需过于追求完美。有时候过于追求准确性可能反而破坏实际需求。例如,手机号、邮箱、URL 的正则,很多人试图编写完美的表达式,结果过于严格,反而引发了问题,从而影响了用户的正常使用

JS 正则表达式完整教程

验证相关

是否是金额(精确到分)

1
const MONEY_PATTERN = /^(0|([1-9]\d*))(\.\d{1,2})?$/

更严格

1
2
const MONEY_PATTERN =
/(?:^[1-9]([0-9]+)?(?:\.[0-9]{1,2})?$)|(?:^(?:0){1}$)|(?:^[0-9]\.[0-9](?:[0-9])?$)/

是否是手机号

1
const MOBILE_PATTERN = /^1\d{10}$/
1
const MOBILE_PATTERN = /^1[3-9]\d{9}$/

是否是邮箱号

1
const EMAIL_PATTERN = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

更严格的邮箱正则 —— 参考 MDN

1
2
const EMAIL_PATTERN =
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

是否是 QQ 号

1
const QQ_NUMBER_PATTERN = /^[1-9]{1}\d{4,11}$/

是否是链接地址

1
2
const URL_PATTERN =
/^(https|http):\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/

是否是身份证号码

1
2
const ID_CARD_NUMBER_PATTERN =
/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/

是否是 16 进制颜色

1
const HEX_COLOR_PATTERN = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/

格式相关

344 格式手机号

从左到右匹配

1
const pattern = /(^\d{3}|\d{4}\B)/g

举 🌰

1
'15512341234'.replace(/(^\d{3}|\d{4}\B)/g, '$1 ')

从右到左匹配

1
const pattern = /\B(?=(\d{4})+\b)/g

举 🌰 :

1
'15512341234'.replace(/\B(?=(\d{4})+\b)/g, ' ')

隐藏手号中间 4 位[

1
const pattern = /(\d{3})\d{4}(\d{4})/

举 🌰 :

1
'15512341234'.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')

数字千分位格式化

1
const pattern = /(\d)(?=(\d{3})+\.)/g

举 🌰 :

1
'5201314.1314'.replace(/(\d)(?=(\d{3})+\.)/g, '$1,') // '5,201,314.1314'

保留两位小数

1
const pattern = /(\d)(?=(\d{3})+\.)/g

举 🌰 :

1
;(5201314.1314).toFixed(2).replace(/\B(?=(\d{3})+\b)/g, ',') // '5,201,314.13'