js \d正则匹配数字失败问题记录

记录一次的正则匹配数字失败的问题

在一次开发中,需要匹配卡号,正则表达式较为复杂,想通过元字符进行简化,便由:

new RegExp('^622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[01][0-9]|92[0-5])[0-9]{10,}$')

变成:

new RegExp('^622(12[6-9]|1[3-9]\d|[2-8]\d{2}|9[01]\d|92[0-5])\d{10,}$')

发现修改后,无论如何都匹配不上了
测试结果1

结论

最后发现,js创建正则表达式有两种方式:

  1. 字面量形式
  2. 构造函数

当通过构造函数进行匹配时,需要符合字符转义规则。因此,当使用\d元字符通过构造函数进行正则表达式生成时,需要加上"\"(反斜杠),对元字符中的反斜杠进行转义。即:

let a = new RegExp("\d")     // a.test(1) === false
let b = new RegExp("\\d")    // b.test(1) === true
let c = new RegExp(/\d/)     // c.test(1) === true
let d = /\d/                 // d.test(1) === true

所以,将原先的正则修改成

 new RegExp('^622(12[6-9]|1[3-9]\\d|[2-8]\\d{2}|9[01]\\d|92[0-5])\\d{10,}$')

 new RegExp(/^622(12[6-9]|1[3-9]\d|[2-8]\d{2}|9[01]\d|92[0-5])\d{10,}$/)

/^622(12[6-9]|1[3-9]\d|[2-8]\d{2}|9[01]\d|92[0-5])\d{10,}$/

就ok了!当然,最开始提到的正则也是可以用的。
测试结果2

其实,该问题其实在教程里也是有提到的,还是需要打牢基础~菜鸟教程
附上本次正则校验的规则,要是有更好的建议也可以提出~
代码片段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值