正则 数字长度不大于位数字_Javascript正则表达式扫盲

4178c867cdd0a597c8573e088dfdde08.png

前言

正则表达式应用太广泛了,遍布于各端程序猿日常编码中。

这里只是做学习补充,简单阐述一下对?!,?=,?:的理解,知道的大佬就算是温故了,不理解希望能够帮你扫扫盲点。

用一个例子开头吧,我在写bolg的注册部分时,密码要求必须为数字、字母、特殊符号组合,并且长度为8-16位。

长度很好验证,难点是在必须为数字、字母、特殊符号的组合。

哪些是不可行的

1. 纯数字不行

2. 纯字母不行

3. 纯特殊符号不行

4. 数字和字母组合不行

5. 数字和特殊符号组合不行

6. 字母和特殊字符不行

这是高中学的排列组合吧,哈哈哈,言归正传,看看可能用到的正则。如下图所示:

6ea1406e5222f169986dd3097c3774e5.png
wW

就可以啦

接下来开始写啦,

包含数字、字母、特殊符号的正则

const reg = /[a-zA-Z]+$/

但是这个有一个问题,就是他包含了以上不可行的6种情况,所以还需要把以上的6种情况排除。

1. 纯数字

const reg = /[_W]+$/

2. 纯字母

const reg = /[da-zA-Z]+$/

没毛病吧,嘿嘿

3. 纯特殊符号

const reg = /[d_W]+$/

4. 数字和字母

const reg = /[a-zA-Z_W]+$/

5. 数字和特殊符号

const reg = /[a-zA-Z_W]+$/

6. 字母和特殊符号

const reg = /[a-zA-Z_W]+$/

都写出来了,接下怎么排除呢,这就需要?!上场啦。

先来介绍一波

看看官方文档怎么解释:

4e6c5390cbb46067895a9612d7b469db.png

是不是有点晕,其实认真看例子的话,还是挺简单的。来个简易版的

x(?=y) 查找y前面的x

// ?=x(?=y) // 查找y前面的x// eg:const reg = /Jack(?=Spart)/;reg.test('JackSpart'); // truereg.test('JackASpart'); // falsereg.test('JackSpartqaass'); // true

x(?!y) 查找后面不是y的x

// ?!x(?!y) // 查找后面不是y的x// eg:const reg = /d+(?!.)/; // 匹配数字reg.exec('3.141'); // 141// 这里是因为3的后面有.,而141后面没有点

(?

// ?

组合之后的正则

const reg = /^(?!d+$)(?![a-zA-Z]+$)(?![_W]+$)(?![da-zA-Z]+$)(?![d_W]+$)(?![a-zA-Z_W]+$)[wW]{8,16}$/

符合需求,完美。

?:

1. () 表示捕获分组,()会把每个分组里的匹配的值保存起来,使用$n(n是一个数字,表示第n个捕获组的内容)

2. (?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来

// eg: 数字格式化 1,123,000"1234567890".replace(/B(?=(?:d{3})+(?!d))/g,",") // 结果:1,234,567,890,匹配的是后面是3*n个数字的非单词边界(B)

最后

算是一个正则表达式的扫盲吧。

以上是自己一个浅显的理解,如有错误,欢迎留言指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值