【Regex】判断密码强度的正则表达式
原文地址 https://www.cnblogs.com/younShieh/p/17082522.html
如果本文对你有所帮助,不妨点个关注和推荐呀,这是对笔者最大的支持~
需求
最近在最做一个软件的注册登录的功能,需要用到对密码强度的判断,并对当前输入的密码的强度进行输出。需求里对密码分了三级,分别是低强度、中强度、高强度,但是没有对什么是低强度、什么是高强度进行详细分类,所以自己在做的时候简单做了下分类。对密码分类后,我想到的是使用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位纯数字,纯字母,纯标点的情况。与之前的写法相同。
高强度密码同理。
【Regex】判断密码强度的正则表达式的更多相关文章
- Js判断密码强度并显示提示信息
用javascipt实现的Ajax判断密码强弱的功能,大多数有用户注册功能的网站,都会有这么一个功能,作为WEB程序员,应该会写这种小模块哦,不懂的就看下这个例子,觉得挺简单,当初帮助了不少人学会了密 ...
- 【课上OJ】判断密码强度
一个判断密码强度问题: 假设允许采用以下四类字符作为密码: (1)大写英文字母,(2)小写英文字母,(3)数字0-9,(4)特殊符号 @ - _ # ~ 对密码强度做以下规定: Best: 长度> ...
- js判断密码强度是否符合
/** 判断密码强度是否符合 */ function check_passwd_intensity(password) { value = $.trim(password); if( value.le ...
- JavaScript判断密码强度
以下是代码: <html> <head> <title>JS判断密码强度</title> <script language=javascript& ...
- 密码强度的正则表达式(JavaScript)总结
简言 本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全.并分别给出了两个方案的解析和测试程序.一般大家可以根据自己的项目的实际需要,自行定义自己的密码正则约定. 前言 用户注册时,都 ...
- js判断密码强度
html代码: <form name="form1" action=""> 密码:<input type="password&quo ...
- js动态判断密码强度&&实用的 jQuery 代码片段
// 网上拷贝的代码,效果不太好需要自己调整<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...
- PHP 判断密码强度
$score = 0; if(preg_match("/[0-9]+/",$str)) { ...
- php判断密码强度函数
其实就是一些策略正则,写好了就留下来以后用. print_r(getPasswordStrength('s1212adsddfASD;\'g;\'gh.h,h..;')); function getP ...
- 利用JavaScript来实现用动态检验密码强度
平时我们会在某些网站的注册页面或者更改密码的页面发现当我们输入密码时,会有一个类似于进度条的长条进行提示用户输入的密码强度.如下图: 我看到有些人用几张不同的图片来替换,这样似乎可以,但是不太好.所以 ...
随机推荐
- 我的 React 最佳实践
There are a thousand Hamlets in a thousand people's eyes. ----- 威廉·莎士比亚 免责声明:以下充满个人观点,辩证学习 React 目前开 ...
- nginx性能监控
nginx自带监控模块,需要在nginx编译安装时加入监控模块. 1. 编译安装时加入监控模块 ngin编译安装时,加入编译参数为:--with-http_stub_status_module.如下所 ...
- 2022-11-07 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...
- 【DL论文精读笔记】AlexNet
1.1引言 1.2数据集 就是ImageNet,当时计算机视觉最大的数据集 1.3结构 采用双GPU结构实现,并行处理图像,2-3,5-全连接部分中间还将特征图共享 最后全连接层输出的4096的语义信 ...
- i春秋Vld
进去就问我们懂不懂Vulcan Logic Dumper,然后下面是一个报false.我们查看源码,在源码的最后提示我们index.php.txt的存在,话不多说,直接访问试试. 出现一堆我们暂时还看 ...
- IDEA项目下out与target目录的区别详解
IDEA项目下out与target目录的区别详解 一.目录主要区别: out存放的是该项目下所有Module(模块)的编译结果. target存放的是单个Module的编译结果. 二.目录详解 out ...
- Java Web中requset,session,application 的作用域及区别
三者概述 requset概述: request是表示一个请求,只要发出一个请求就会创建一个request 用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递. session ...
- 关于linux上steamplay无法启动windows游戏
前言 很多游戏,deepin-wine做的兼容性不如steamplay linux上steamplay加载windows游戏 点击添加游戏---------添加非steam游戏 点击浏览 改为all ...
- node学习01
1.前言 Node.js 是一个开源和跨平台的 JavaScript 运行时环境 Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核). 这使得 N ...
- day32 6 请求转发与重定向的区别、session会话对象 & cookie & 8 应用程序上下文对象ServletContext & 5 请求转发与jsp页面内置对象
1 请求转发与重定向的区别 2 session与cookie的区别 3 过滤器与监听器的区别 4 web-inf目录 web-inf目录是安全目录,无法从客户端访问,只能通过(服务端的)servlet ...