用户设置的密码弱,会导致信息安全问题,一般的系统都要求设置强密码。今天的文章给大家介绍如何通过一个正则表达式来判断用户的密码是否为强密码。

1、介绍一下开发中使用正则表达式的流程:

1、分析所要匹配的数据特点,模拟各种测试数据;

2、利用正则工具,写正则表达式与测试数据进行匹配,从而验证你写的正则;

3、在程序里调用在正则工具中验证通过的正则表达式。

2、Java中如何使用正则

Java中正则相关类位于java.util.regex包下,主要使用2个类,如下:

如何判断用户的密码是否为强密码?_正则

Pattern类:

Pattern是正则表达式regex的编译表示形式

如何判断用户的密码是否为强密码?_正则表达式_02

Matcher类:

通过解释Pattern对输入的字符串input执行匹配操作的引擎

如何判断用户的密码是否为强密码?_Java_03

注意:在Java代码中转义字符“\”要写成“\\”才表示一个“\”。

比如regex=\d,在Java代码中应该写成“\\d”。

3、下面是京东注册页面的截图:以京东注册为例,京东建议使用字母、数字和符号两种及以上的组合,6-20个字符。

如何判断用户的密码是否为强密码?_数据库_04

下面我们通过正则表达式来完成用户输入的密码是否符合密码规则的校验。

首先分析密码要求,如下:

1、密码包括字母、数字和符号3种字符

2、必须包含2种及以上的字符

3、密码长度6-20位

字母包括:A-Za-z,数字包括:0-9

符号包括32个:`-=\][';/.,~!@#$%^&*()_+|}{":?>< 

需要注意的是如果使用32个符号,特殊字符“\”、“[”、“]”是需要进行转义的,为了简单直观,我们假设符号只有@#$3个。

进一步分析,密码只有字母,数字,符号3种类型的字符,要求必须包含2种及以上,那么密码组合的种类有4种(3个里面选2个+3个全选=4),即:

字母+数字,字母+符号,数字+符号,字母+数字+符号。

如果从正面去考虑这个问题,那么正则会很难写,所以我们从反面考虑:“必须包含2种及以上”的反面就是“只包含1种”,也就是说密码要求“不能只包含1种字符”。

密码长度6-20位,需要用到开始标记“^”和结束标记“$”,量词{6,20}

最终分析密码要求是:

密码从开始到结束必须6-20位而且不能全部是1种单一的字符

因此正则可以这么写:

regex=^(?![A-Za-z]+$)(?![0-9]+$)(?![@#$]+$)[A-Za-z0-9@#$]{6,20}$

解释:

^(?![A-Za-z]+$)表示从头到尾不能全是字母

^(?![0-9]+$)表示从头到尾不能全是数字

^(?![@#$]+$)表示从头到尾不能全是符号@#$

^[A-Za-z0-9@#$]{6,20}$表示从头到尾只能是字母数字符号@#$的集合

需要注意的是,开始符“^”和预搜索“(?!)”都是零宽的,表示位置,所以开始符“^”只需要在整个正则表达式的开始处写一个即可。

如果这里看不懂的话,请看《一篇文章学会正则表达式的语法》的相关内容。

最后我们把分析到的表达式代入到Java代码完成功能。注意在Java中,反斜杠需要转义,即一杠变二杠。

如何判断用户的密码是否为强密码?_Java_05

最终结果如下:

如何判断用户的密码是否为强密码?_正则表达式_06

至此,正则表达式的所有内容介绍完了,相信你已经具备了正则开发的能力,如果想获取以上的源代码,请在后台回复关键词“正则源码”获取。

推荐一个正则工具“RegexBuddy”,在后台回复关键词“正则表达式”获取。