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