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

大家很多都碰到这样的情况,在注册某些网站的账号时,都要求你的密码不能全是数字或是英文。最典型的就是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种)";

		}

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

github主页:https://github.com/chenyufeng1991 。欢迎大家访问!

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...