大客户采购热线 010-57180806

用正则表达式设计最复杂高强度密码同时要求大小写字母数字和特殊符号

正则表达式
正则表达式

用正则表达式设计最复杂高强度密码同时要求大小写字母数字和特殊符号?这个可以有!阿里云北京分销中心工程师这次给大家分享验证用户设置的密码强度的正则表达式。 验证用户设置的密码强度有哪些注意事项? 下面是几个不同密码复杂强度的实际案例, 让我们来看看怎么设置史上最复杂密码吧。

本文给出了两种密码强度的正则表达式方案,一种简单,一种更复杂,更安全。 分别给出了两种方案的分析和测试过程。 一般可以根据自己项目的实际需要定义自己的密码常规协议。

当用户注册时,他们将使用常规密码验证。 要编写正确的正则表达式,必须先定义表达式规则。

方案1 (超级简单的密码正则表达式规则)

假设密码验证做如下规则定义:最短6位,最长16位 {6,16}

可以包含小写大母 [a-z] 和大写字母 [A-Z]

可以包含数字 [0-9]

可以包含下划线 [ _ ] 和减号 [ – ]

根据以上规则,很容易给出正则字面量定义如下:var pattern = /^[\w_-]{6,16}$/;

方案1解读:

字面量 / /

正则表达式的字面量定义为包含在一对斜杠(/)之间的字符,例如:var pattern = /s$/;

上述字面量匹配所有以字母“s”结尾的字符串。

字符类 [ ]

将字符放进方括号内就组成了字符类。一个字符类可以匹配它所包含的任意字符。因此,正则表达式 /[abc]/ 就和字母“a”,“b”,“c”中的任意一个都匹配。

字符类可以使用连字符来表示字符范围。要匹配拉丁小写字母可以使用 /[a-z]/ 。

字符类 \w

字符类 \w 匹配任何ASCII字符组成的单词,等价于[a-zA-Z0-9]。

[\w_-] 表示匹配任意的拉丁大小写字母,数字再加上下划线和减号。

重复 {}

在正则表达式中用{ }来表示元素重复出现的次数。{n,m} 匹配前一项至少n次,但不能超过m次

{n,} 匹配前一项n次或更多次

{n} 匹配前一项n次

[\w_-]{6,16} 表示匹配任意的拉丁大小写字母,数字再加上下划线和减号出现最少6次,最多16次。

匹配位置

^ 匹配字符串的开头,在多行检索中,匹配一行的开头

$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾

/^\w/ 匹配以大小写字母或数字开头的字符串。

方案1测试

给出测试结果如下:var pattern = /^[\w_-]{6,16}$/;

pattern.test(‘123456’) = true;

pattern.test(‘-ifat33’) = true;

pattern.test(’42du’) = false;

pattern.test(‘du42du42du42du421’) = false;

pattern.test(’42du42@’) = false;

根据测试结果,可以得出方案一只是对密码进行了简单的限制,并不能保证密码的强度和账户的安全。

方案2 (安全)

假设密码验证做如下规则定义:最短6位,最长16位 {6,16}

必须包含1个数字

必须包含2个小写字母

必须包含2个大写字母

必须包含1个特殊字符

根据以上规则,很容易给出正则字面量定义如下:

var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?]).*$/;

方案2解读

字符类 .

字符类 . 表示除换行符和其他Unicode行终止符之外的任意字符。

正向先行断言 (?= )

在符号“(?=” 和 “)” 之间加入一个表达式,它就是一个先行断言,用以说明圆括号内的表达式必须正确匹配。比如: /Java(?=\:)/ 只能匹配Java且后面有冒号的。

(?=.*[!@#$%^&*?])

该先行断言表示,必须包括一个特殊字符。上述表达式中的10个特殊字符为键盘1,2…0的上档键字符,也可以添加别的特殊字符。注意:如果添加字符是正则表达式中具有特殊含义的,需要在符号前加反斜线(\)转义。

方案2测试

给出测试结果如下:var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?]).*$/;

pattern.test(‘du42DU!’) = true;

pattern.test(‘duDUd!’) = false;

pattern.test(’42dud!’) = false;

pattern.test(’42DUD!’) = false;

pattern.test(’42duDU’) = false;

pattern.test(’42duU(‘) = false;

pattern.test(’42dUU!’) = false;

相信你看了这篇文章以后,已经掌握了使用正则表达式设置密码复杂度的方法,这里再送你一盘芝士吧:

正则表达式的字符串模式与字面量模式

字面量模式对应的字符串模式
/\.at/ “\\.at”
/\[bc\]at/“\\[bc\\]at”
/name\/age/“name\\/age”
/\d.\d{1,2}/“\\d.\\d{1,2}”
/\w\\hello\\123/“\\w\\\\hello\\\\123”
阿里云服务器双十一活动

阿里云优惠券怎么领既方便又实惠?(阿里云优惠券2021双十一特刊)

11月1日,2021年阿里云双十一上云狂欢节正式开启了,阿里云给新客户准备了全年最低特惠价格,云服务器低至0.4折起。阿里云服务器怎么买最便宜呢?下面阿里云北京授权分销商万维景盛为您介绍一下2021年阿里云双十一云计算产品最强省钱攻略,需要采购ECS云服务器、RDS云数据库、CDN网站加速、OSS对象存储、DDOS防护高防ip、SLB负载均衡等云计算产品的客户不要错过一年一次的好机会哦

阅读更多 »
dedecms织梦建站模板

DEDECMS织梦CMS建的网站要被起诉怎么办?脱坑迁移方法来了!

2021年9月26日,织梦开发商上海卓卓公司公告称,2021年10月26日起,织梦程序将开展大规模维权行动,开始收费,将对使用该网站的企业或个人没有购买授权的网站发起起诉行动。据了解,DEDECMS织梦程序的商业授权费用为5800元,织梦官方已经聘请了律师团队,采购了取证服务器,7*24小时不间断地全网抓取织梦站点,使用织梦程序的网站将被服务器拍照取证,用以起诉。

阅读更多 »
封面,企业邮箱

正规企业单位怎样选择高性价比企业邮箱?附阿里云企业邮箱优惠券

企业邮箱是以企业域名做后缀的邮箱,既体现公司品牌形象,又方便公司主管人员对员工信箱进行统一管理,还能使得公司商业信函来往获得更好更安全的管理,是现今互联网时代不可缺少的现代化通讯工具。正规企业、事业单位和机构组织,一般都要配备以自家域名为后缀的企业邮箱。企业邮箱产品林林总总,那么怎样才能选择性价比高的企业邮箱呢?阿里云企业邮箱分销商万维景盛市场部总监江先生介绍说,一般选择企业邮箱,需要考虑以下因素

阅读更多 »
正则表达式

用正则表达式设计最复杂高强度密码同时要求大小写字母数字和特殊符号

用正则表达式设计最复杂高强度密码同时要求大小写字母数字和特殊符号?这个可以有!阿里云北京分销中心工程师这次给大家分享验证用户设置的密码强度的正则表达式。 验证用户设置的密码强度有哪些注意事项? 下面是几个不同密码复杂强度的实际案例, 让我们来看看怎么设置史上最复杂密码吧。

阅读更多 »
dedecms织梦建站模板

一读掌握dedecms织梦网站系统安装方法

一读掌握dedecms织梦网站系统安装方法,通过这一张图,让你完全掌握国内最受欢迎的网站管理系统DEDECMS的部署流程,从上传代码到运行程序、配置数据库、还原数据库、生成静态页,一应俱全,有了这张图解教程,安装织梦再也不求人了。发愁没有好的织梦模板?购买万维景盛安心主机,就送织梦精品模板,3000余套模板任选。

阅读更多 »
CSFR跨站请求攻击原理示意图

什么是CSFR跨站请求攻击及防御方法

CSRF即跨站请求攻击,是攻击者通过一些欺骗性的技术手段让用户的浏览器去访问一个自己以前登录过的站点并自动执行一些非授权的操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会认为这是真正的用户操作而去执行。

阅读更多 »