使用正则表达式提高用户密码的复杂度和安全性

       大家很多都碰到这样的情况,在注册某些网站的账号时,都要求你的密码不能全是数字或是英文。最典型的就是Apple ID,必须要求是至少有数字、大写字母 和小写字母三种形式;其他比如还有淘宝账号,至少是某几种类型的组合。这从一定程度上使密码变得复杂,同时也变得安全,使别人更难以破解。这种功能的实现一般是使用正则表达式来进行检查,对用户输入进行控制。

       具体需求如下:现在要求用户注册时的密码必须是(1)阿拉伯数字;(2)大写英文字母;(3)小写英文字母;(4)标点符号;其中至少两种类型的组合,否则用户注册失败,需要重新输入密码。

      通过分析后,写出一下几种类型的正则表达式:

(1)阿拉伯数字:

"[\\p{Digit}]+"
注意:+  加号表示匹配一次或多次,即大于等于一次。上述的正则表达式代表了用户密码输入的全是数字。下同。

(2)大写英文字母:

"[\\p{Upper}]+"
(3)小写英文字母:

"[\\p{Lower}]+"
(4)标点符号:

"[\\p{Punct}]+"

       正则表达式写出后,如何通过业务逻辑去判断用户输入的是否符合要求呢?

      解决方案就是从反面进行考虑,如果用户输入的符合上述的其中之一,表示注册失败,否则就是成功。具体的业务逻辑如下:

    

		String regex_number = "[\\p{Digit}]+";// 数字
		String regex_lower = "[\\p{Lower}]+";// 正则表达式 密码:小写字母
		String regex_upper = "[\\p{Upper}]+";// 大写字母
		String regex_char = "[\\p{Punct}]+";// 标点符号

		String user_password = "用户输入的密码";

		if (user_password.matches(regex_number)
				|| user_password.matches(regex_upper)
				|| user_password.matches(regex_lower)
				|| user_password.matches(regex_char)) {

			return "注册失败,密码不符合要求,大写+小写+数字+字符(至少包含2种)";

		}

        如果用户输入的全是数字或者全是大写或者全是小写或者全是标点符号,则该判断为真,返回注册失败信息;如果该判断为假,表示密码符合要求,注册成功。实现了对用户注册时密码复杂度的控制。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值