原文地址 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】判断密码强度的正则表达式的更多相关文章

  1. Js判断密码强度并显示提示信息

    用javascipt实现的Ajax判断密码强弱的功能,大多数有用户注册功能的网站,都会有这么一个功能,作为WEB程序员,应该会写这种小模块哦,不懂的就看下这个例子,觉得挺简单,当初帮助了不少人学会了密 ...

  2. 【课上OJ】判断密码强度

    一个判断密码强度问题: 假设允许采用以下四类字符作为密码: (1)大写英文字母,(2)小写英文字母,(3)数字0-9,(4)特殊符号 @ - _ # ~ 对密码强度做以下规定: Best: 长度> ...

  3. js判断密码强度是否符合

    /** 判断密码强度是否符合 */ function check_passwd_intensity(password) { value = $.trim(password); if( value.le ...

  4. JavaScript判断密码强度

    以下是代码: <html> <head> <title>JS判断密码强度</title> <script language=javascript& ...

  5. 密码强度的正则表达式(JavaScript)总结

    简言 本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全.并分别给出了两个方案的解析和测试程序.一般大家可以根据自己的项目的实际需要,自行定义自己的密码正则约定. 前言 用户注册时,都 ...

  6. js判断密码强度

    html代码: <form name="form1" action=""> 密码:<input type="password&quo ...

  7. js动态判断密码强度&&实用的 jQuery 代码片段

    // 网上拷贝的代码,效果不太好需要自己调整<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  8. PHP 判断密码强度

                 $score = 0;            if(preg_match("/[0-9]+/",$str))            {           ...

  9. php判断密码强度函数

    其实就是一些策略正则,写好了就留下来以后用. print_r(getPasswordStrength('s1212adsddfASD;\'g;\'gh.h,h..;')); function getP ...

  10. 利用JavaScript来实现用动态检验密码强度

    平时我们会在某些网站的注册页面或者更改密码的页面发现当我们输入密码时,会有一个类似于进度条的长条进行提示用户输入的密码强度.如下图: 我看到有些人用几张不同的图片来替换,这样似乎可以,但是不太好.所以 ...

随机推荐

  1. SpringBoot 常用注解的原理和使用

    @AutoConfiguration 读取所有jar包下的 /META-INF/spring.factories 并追加到一个 LinkedMultiValueMap 中.每一个url中记录的文件路径 ...

  2. 2流高手速成记(之八):基于Sentinel实现微服务体系下的限流与熔断

    我们接上回 上一篇中,我们进行了简要的微服务实现,也体会到了SpringCloudAlibaba的强大和神奇之处 我们仅改动了两个注释,其他全篇代码不变,原来的独立服务就被我们分为了provider和 ...

  3. 畅联云平台(www.24hlink.cn)支持的用传列表

    无锡蓝天 沈阳君丰 无锡富贝 海康威视 海湾 苏州思迪 法安通 北大青鸟 金盾 依爱 威隆 1)几乎集齐了市场上常见的用户信息传输装置的类型,如果没接入的,我们也能接入哦. 2)欢迎咨询我们关于用传的 ...

  4. day17-Servlet06

    Servlet06 15.HttpServletResponse 15.1HttpServletResponse介绍 每次HTTP请求,Tomcat都会创建一个HttpServletResponse对 ...

  5. JavaScrip基础学习笔记(一)

    一.三元表达式 1.1 什么是三元表达式 由三元运算符组成的式子我们称为三元表达式 1.2 语法结构 条件表达式 ? 表达式1 : 表达式2 1.3 执行思路 如果表达式为结果真 则返回表达式1的值, ...

  6. 微信小程序根据开发环境切换域名

     domain.js // 获取当前账号信息,线上小程序版本号仅支持在正式版小程序中获取,开发版和体验版中无法获取. // envVersion:'develop','trial','release' ...

  7. Multipass,本地轻量级Linux体验!

    Multipass介绍 Multipass 是由Ubuntu官方提供,在Linux,MacOS和Windows上快速生成 Ubuntu虚拟机 的工具.它提供了一个简单但功能强大的CLI,可让我们在本地 ...

  8. Sqoop的介绍和安装

    sqoop下载地址:https://share.weiyun.com/woVbfnfS 或者 https://archive.apache.org/dist/sqoop/1.99.7/ Sqoop简介 ...

  9. 【重难点】函数式接口、函数式编程、匿名内部类、Lambda表达式、语法糖

    一.函数式接口 1.概念 仅有一个抽象方法的接口 适用于函数式编程(Lambda表达式) 常见:Runnable.Comparator<>.生产型接口Producer的get方法.消费型接 ...

  10. React DevUI 18.0 正式发布🎉

    Jay 是一位经验丰富并且对质量要求很高的开发者,对 Angular.React 等多种框架都很熟悉,我们在开源社区认识,在我做开源社区运营的过程中,Jay 给了我很多帮助,他也是 React Dev ...