资讯专栏INFORMATION COLUMN

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

Carl / 1633人阅读

摘要:简言本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全。要写出正确的正则表达式,先要定义表达式规则。重复在正则表达式中用来表示元素重复出现的次数。你可以根据项目需要,自己调整上述正则表达式。

简言

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

前言

用户注册时,都会用到密码正则校验。要写出正确的正则表达式,先要定义表达式规则。

方案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;

查看源码

根据测试结果可以看出,方案1只是对密码做了简单的限定,不能保证密码的强度和帐号安全。

方案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;

查看源码

从以上测试可以看出,密码足够强壮和安全。你可以根据项目需要,自己调整上述正则表达式。

原文链接

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93286.html

相关文章

  • 【收藏】15个常用javaScript正则达式

    摘要:用户名正则用户名正则,到位字母,数字,下划线,减号输出密码强度正则密码强度正则,最少位,包括至少个大写字母,个小写字母,个数字,个特殊字符输出整数正则正整数正则负整数正则整数正则输出输出输出数字正则可以是整数也可以是浮点 1 用户名正则 //用户名正则,4到16位(字母,数字,下划线,减号) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //输出 tr...

    MarvinZhang 评论0 收藏0
  • 基于规则评分密码强度检测算法分析及实现(JavaScript)

    摘要:方案简单方案算法通过密码构成分析,结合权重分派,统计得出密码强度得分。 简言 用正则表达式做用户密码强度的通过性判定,过于简单粗暴,不但用户体验差,而且用户帐号安全性也差。那么如何准确评价用户密码的强度,保护用户帐号安全呢?本文分析介绍了几种基于规则评分的密码强度检测算法,并给出了相应的演示程序。大家可以根据自己项目安全性需要,做最适合于自己的方案选择。 showImg(http://...

    ernest.wang 评论0 收藏0
  • 正则达式

    摘要:最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。学习目标了解正则表达式语法在中使用正则表达式在中使 JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经验,进行扩展延伸,同时指出书里的一些问题。将会讨论安全的类型检测、惰性载入函数、冻结对象、定时器等话题。1. 安全的类型检测...

    yibinnn 评论0 收藏0
  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • 正则达式实例

    摘要:收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。校验手机号下面是国内开头的手机号正则表达式。提取网页图片假若你想提取网页中所有图片信息,可以利用下面的表达式。抽取注释如果你需要移除中的注释,可以使用如下的表达式。 收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。 校验基本日期格式 校验密码强度 校验中文 由数字、26个英文字母或下划线组成的字符...

    zhoutk 评论0 收藏0

发表评论

0条评论

Carl

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<