正则表达式在密码强度匹配中的使用

一、背景

  今天领导让我写几个正则表达式来对密码做强度验证,听到写正则表达式内心是这样的感觉(哈哈,三分钟搞定,今天又可以打鱼了)。需求如下:密码组成只能是数字字母英文可见半角符号,然后需要如下4个表达式:

  • 长度6位及以上
  • 长度6位及以上,包含数字,包含字母
  • 长度6位及以上,包含数字,包含字母,包含半角符号
  • 长度六位及以上,包含数字,包含大写字母,包含小写字母,包含半角符号

  看完需求我就有点懵了,包含数字或者字母我会写,但是同时存在还要在一个表达式中就有点懵了。

二、解决方法

  以第三种为例,这个可以分解为如下需求:

  • 存在数字
  • 存在字母
  • 存在半角符号
  • 长度六位及以上

关键是如何同时满足前三个条件,在我有限的知识里并不知道怎么搞,然后只好求助于万能的百度了,最终在找了几个小时后发现如下几个关键词,来源菜鸟教程

  • (?=pattern) :正向预测先行搜索 名字看着高大上,不明所以,看完示例大概明白什么意思,这个表达式匹配从这个表达式起始的字符串(我也不知道咋解释),就是假设这样一个表达式abc(?=[abc]) ,用它来匹配abc123字符串,(?=[abc])只会对作用于后面的123,这个显然是不匹配的后整个就不匹配了,然后关键来了名字里有预测两个字,这两个字表名了这个表达式的特性:不占用字符,匹配后如果匹配成功就继续匹配了好像从来不存在这个东西一样,匹配失败就立即返回失败了。利用这个特性我们就可以给正则加限制条件了。
  • (?!pattern) :反向预测先行搜索 概念和上面一样,但是效果是相反的,abc(?[abc]),对于abc123是匹配成功的,对于abca匹配失败,如下所示: reg = /abc(?![abc])/; reg.test("abc123") //返回true reg.test("abca") //返回false

  有了上面的知识就能搞定需求啦。

三、结果

  对于存在字母我们可以用这样的表达式`(?=.*?[a-zA-Z]+.*?),来检查是否存在至少一个字母,最后对于需求3的表达式如下:(半角字符我用的ASCII码里的16进制表示的)

^(?=.*?\d+.*?)(?=.*?[a-zA-Z]+.*?)(?=.*?[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+.*?)[\da-zA-Z\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]{6,}$

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发 -- 分享 互助 成长

sort+结构体实现二级排序

之前介绍的sort函数由于其效率较高,使用较为简单让我用起来那叫一个爽,今天再写一篇使用sort+结构体实现二级排序的方法。 还是先想个问题吧,比如我想输入5个...

1869
来自专栏程序员互动联盟

【编程基础】main函数,你知道多少?

近期学习时对这个问题产生了迷惑,看到了这篇文章,感觉挺好。 在C/C++的学习过程中,一个很常见的问题就是void main和int main有什么区别呢?本文...

3568
来自专栏大史住在大前端

javascript基础修炼(2)——What's this(上)

this是javascript关键字之一,是javascript能够实现面向对象编程的核心概念。用得好能让代码优雅高端,风骚飘逸,用不好也绝对是坑人坑己利器。我...

811
来自专栏Golang语言社区

第九节 Go语言循环语句

干货来了!!!为了让更多的小伙伴喜欢Golang、加入Golang之中来,Golang语言社区发起人彬哥联合业界大牛共同推出了Go语言基础、进阶、提高课程,目前...

832
来自专栏Crossin的编程教室

【Python 第21课】 函数的参数

今天发现了一个iPad上的游戏,叫Cargo-Bot。这个游戏需要你用指令控制一个机械臂去搬箱子。游戏里蕴含了很多编程的思想,包括循环、函数调用、条件判断、寄...

3289
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列1

Java面试系列1 1 静态变量和实例变量的区别? 静态变量也称作类变量,由static修饰,如:static int s; s就是静态变量,它只能通过类来访...

2775
来自专栏程序你好

Java和c++构造函数的区别是什么?

如果你是一个c++程序员,现在正在学习Java,你会发现这两种流行的面向对象编程语言有很多相似之处。这两种语言都支持抽象、封装、类、对象和其他OOP概念。但是,...

994
来自专栏Crossin的编程教室

全菊变量和菊部变量

前阵子还自我吐槽了下文章的选题,热点没营养,干货没人看。这下好了,找到了热点与干货的完美结合

1122
来自专栏Java帮帮-微信公众号-技术文章全总结

第八天 自定义类型方法集合混合使用【悟空教程】

1988
来自专栏web前端教室

js数据结构与算法--散列

不扯淡了,还是来学技术吧。 散列,是一种常用的数据存储技术,优势在于可以快速的插入或取出,使用它的数据结构,叫散列表。 它的优势哈,插入、删除、取用数据都很快,...

21110

扫码关注云+社区