首页 > 其他分享 >【Regex】判断密码强度的正则表达式

【Regex】判断密码强度的正则表达式

时间:2023-02-01 14:45:46浏览次数:59  
标签:Regex 匹配 数字 正则表达式 强度 密码 字母

原文地址 https://www.cnblogs.com/younShieh/p/17082522.html

❤如果本文对你有所帮助,不妨点个关注和推荐呀,这是对笔者最大的支持~❤

需求

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

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


在线测试Regex

https://www.goregex.cn/


正文

密码强度分类

  首先完成对密码强度等级的分类。密码为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位纯数字,纯字母,纯标点的情况。与之前的写法相同。


高强度密码同理。



标签:Regex,匹配,数字,正则表达式,强度,密码,字母
From: https://www.cnblogs.com/younShieh/p/17082522.html

相关文章

  • MySQL(三)用正则表达式搜索
    正则表达式是用来匹配文本的特殊的串(字符集合),将一个模式(正则表达式)与一个文本串进行比较;所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式,正则表达式用正则......
  • java正则表达式不包含特殊字符验证
    原文链接:https://blog.csdn.net/weixin_39625782/article/details/114674258packagecom.sodii.regex.demo;importjava.util.regex.Matcher;importjava.util.regex.Pa......
  • 正则表达式
    视频:正则表达式30分钟入门40分钟进阶(绝对能学会)【二倍速观看】测试网站:正则表达式在线测试【测试+可视化】内容回忆:参考手册......
  • VMware虚拟机安装Linux后忘记root密码如何重置
    前言好久没用虚拟机,今天想用时发现,竟然忘记了Linux用户的登录密码,只能暴力修改root用户密码了。下面来说一下,我是怎样成功修改root用户密码的操作步骤大概如下:第一步:启动......
  • 微信注册页面密码的测试用例编写
    要求: 6~18位且由数字和字母组成,注册成功,跳转页面;注册失败,请重新输入密码1.画思维导图   2.excel编写测试用例 ......
  • 正则表达式常用符号
    目录[]\^$[][]匹配一组可能出现的字符例:[Pp]既可以匹配大写的P也可以匹配小写的p连字符(-)代表区间匹配任意数字可以使用[0-9];如果想要匹配所有小写字母,可以写成[......
  • ssh 关闭密码登录
    创建许可文件先使用ssh-keygen-trsa来生成.ssh目录,然后把生成的密钥下载到本地,并在.ssh下创建一个空文件authorized_keys。录入公钥使用vim打开authorized_......
  • 2023冬 密码学趣题——3
    NSSCTFRound7Crypto2一道DFS深搜解决的Crypto问题,近期遇到了好多类似问题,例如2022祥云杯的leak_rsa,pwnhub冬季赛的ASR等使用DFS相比较暴力枚举可以获得较大程度的时间......
  • 盘点保护隐私安全的浏览器,密码锁屏这个功能,真香
    在互联网时代,大家都比较关心自己的隐私安全。一些互联网公司和在线客服会跟踪用户的在线活动,收集用户的个人信息,有时候甚至因为个人的不良习惯导致信息泄露,因此选择隐私和......
  • python使用正则表达式实现字符串替换
    python的字符串提供了replace方法,可以将子串替换成其他字符串,例如下面的代码name='flask_script'name=name.replace('_','-')print(name)#flask-script替换的前提......