详情

首页手游攻略 Regex正则表达式判断密码强度实用指南

Regex正则表达式判断密码强度实用指南

佚名 2026-09-04 08:50:01

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Regex正则表达式判断密码强度”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

需求

落到代码里,  最近在最做一个软件的注册登录的功能,需用到对密码强度的判断,同时对当前输入的密码的强度进行输出。需求里对密码分了三级,分别是低强度、中强度、高强度,但是没有对什么是低强度、什么是高强度进行详细分类,所以自己在做的时候轻松做了下分类。对密码分类后,我想到的是采用Regex表达式直接判断密码的强度,密码字符串输入然后输出对应强度等级就行。

实际处理时,  这里用到Regex表达式,虽然还是经常采用,但是对其语法还是一知半解。主要一般用到都比较轻松,不需多重判断。在网上一番搜索后,基本没有找到符合我要求的Regex表达式。虽然能够用if...else...进行进行分步判断,但是对于我等强迫症而言,能用一句代码说明的事情绝对不写第二句。所以还是头疼了好一会的。大体看了下别人怎么写的,轻松对照了下语法设计,随后开始着手自己的密码强度判断Regex表达式的书写。

在线测试Regex

(链接已移除)

正文

密码强度分类

结合项目来看,  首先完成对密码强度等级的分类。密码为6-16位,分为低、中、高3个等级。密码是大小写字母,数字,英文标点的随机组合。密码强度等级对照表:

长度描述强度
6<=长度<=8纯数字
-纯数字
-纯字母
-纯英文标点
-数字+字母
-数字+标点
-字母+标点
-数字+字母+标点
9<=长度<=12纯数字
-纯字母
-纯英文标点
-数字+字母
-数字+标点
-字母+标点
-数字+字母+标点
13<=长度<=16所有

Regex分析

实际处理时,  Regex表达式再复杂也逃不过最基础的与或非关系,我们完全能够从这方面对复杂的Regex表达式进行拆分。

  在此之前需理解以下几种符号的含义。

符号描述
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
.匹配除 "n" 之外的任何单个字符
*匹配前面的子表达式零次或多次
+匹配前面的子表达式一次或多次
?匹配前面的子表达式零次或一次
d匹配一个数字字符。等价于[0-9]
S匹配任何非空白字符
[xyz]字符种类。匹配⽅括号内的任意字符
(xyz)字符集,匹配与 xyz 完全相等的字符串
[a-z]匹配 'a' 到 'z' 范围内的任意小写字母字符
(?=x)正向肯定预查询包含x
{4,8}匹配4到8位长度的字符
或运算符
转义字符,⽤于匹配⼀些保留的字符{}.*+?^$|
[^x]匹配除了x以外的任意字符

理解这一步时,  拿低强度的密码来说,首先需满足6-8位,其次全是数字或全是字母或全是标点符号,只满足这两个条件的就是低强度的密码。拆分开后就好实现了。

先看怎么实现满足6-8位的表达式。

^S{6,8}$ //任何非空白字符,且满足6-8位

匹配都是数字的情况。

^d+$

匹配都是字母的情况。

^[A-Za-z]+$

匹配都是符号的情况。

^[!@#$%^&*?=]+$

拼接在一起,就是低强度密码的正则表达式:

(?=^d+$|^[A-Za-z]+$|^[!@#$%^&*?=]+$)^S{6,8}$

中强度密码同理。

结合项目来看,匹配6-8位同时包含数字+字母的情况。能够理解为包含数字、字母的字符串,但不全是数字或不全是字母。

(?=.*d)(?=.*[A-Za-z])(?=^[dA-Za-z]+$)^S{6,8}$

从实现思路看,匹配6-8位同时包含数字+标点(!@#$=%^&*?)的情况。同上。

(?=.*d)(?=.*[!@#$=%^&*?])(?=^[d!@#$=%^&*?]+$)^S{6,8}$

匹配6-8位同时包含字母+标点的情况。同上。

(?=.*[A-Za-z])(?=.*[!@#$%^&*?])(?=^[A-Za-z!@#$=%^&*?]+$)^S{6,8}$

理解这一步时,随后再加上匹配9-12位纯数字,纯字母,纯标点的情况。与之前的写法相同。

高强度密码同理。

补充:密码强度 弱 中 强 正则表达式判断

理解这一步时,今天看了下项目中的注册页源码,顺带着看了下判断密码强度的正则表达式,写的很好,最起码比我写的好,所以记录下来留着以后参考
代码如下所示

var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\W).*$", "g")  //强
var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g")  //中
var enoughRegex = new RegExp("(?=.{6,}).*", "g") //弱

用input 的keyup() 方法每输入一个字符用 正则的 enoughRegex.test(password) 方法去检测密码

从实现思路看,本人之前也学过正则表达式的一点皮毛,下面从强到弱解释下这三句正则的规则,如果有说的不对的地方欢迎大神拍砖,共同学习进步!

从实现思路看,强 ==> 密码长度大于等于8位数 包含大写字母[A-Z] + 小写字母[a-z] + 数字[0-9] + 非单词字符的特殊字符[标点符号,空格啥的这些] 结尾

中 ==> 密码长度大于等于7位数 大写字母[A-Z] + 小写字母[a-z] 或者 大写字母[A-Z] + 数字[0-9] 或者 小写字母[a-z] + 数字[0-9] + 任意字符 结尾

实际处理时,弱 ==> 大于等于6位 任何字符或者数字 (如果达不到这个条件就是弱,所以这里需用false判断)

到此这篇关于Regex正则表达式判断密码强度的文章就介绍到这了,更多相关正则表达式判断密码强度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!

您可能感兴趣的文章:
  • JS正则表达式验证密码强度
  • JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
  • 密码强度的正则表达式两种方案JS总结篇
  • JS基于正则表达式实现的密码强度验证功能示例
  • js正则表达式验证密码强度【建议】
  • JS 密码强度校验的正则表达式(轻松且好用)
  • python采用正则表达式检测密码强度源码分享
点击查看更多
推荐专题
热门阅读