0

0

两种JS实现密码强度的正则表达式方法

小云云

小云云

发布时间:2018-03-19 10:16:13

|

4113人浏览过

|

来源于php中文网

原创

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

 

前言

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

方案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/ 匹配以大小写字母或数字开头的字符串。

会译·对照式翻译
会译·对照式翻译

会译是一款AI智能翻译浏览器插件,支持多语种对照式翻译

下载

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

相关推荐:

JS原生对象和正则表达式详解

JavaScript正则表达式小技巧

PHP正则表达式的总结

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

55

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号