大家很多都碰到这样的情况,在注册某些网站的账号时,都要求你的密码不能全是数字或是英文。最典型的就是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种)"; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/chenyufeng1991/article/details/46968095