正则表达式代表典型的用户名和密码

时间:2019-02-06 00:17:56

标签: java regex

在Java中使用RegEx尝试生成用户名和密码:

字母,允许:a-z,A-Z,0-9和@#$%!

用户名,至少1个小写字母,至少1个大写字母,字母,5-13 ch

密码,至少一个小写字母,至少一个大写字母,至少一个数字,字母,5-13 ch

但是每次运行时,我的测试用户名:aA0 @!并测试密码:aA0 @!继续显示我的Toast消息,这表明凭据无效。

Pattern uPattern = Pattern.compile("^((?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9@#$%!]).{5,13})$");
Pattern pPattern = Pattern.compile("^((?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@#$%!])([a-zA-Z0-9@#$%!]).{5,13})$");

if(!uPattern.matcher(mUserName.getText().toString()).matches()
 || !pPattern.matcher(mPassWord.getText().toString()).matches()){
 /* and if the patterns don't match, display a Toast message */
}

1 个答案:

答案 0 :(得分:1)

正则表达式的([a-zA-Z0-9@#$%!]).{5,13}消耗 部分意味着允许的字符串长度为6到14。aA0@!仅5个字符。

有两种方法可供选择,具体取决于进一步的条件:

  • 如果允许的字符仅包含字母,数字和@#$%!,则将([a-zA-Z0-9@#$%!]).{5,13}替换为[a-zA-Z0-9@#$%!]{5,13}
  • 如果要允许除换行符以外的任何字符,请将([a-zA-Z0-9@#$%!]).{5,13}替换为.{5,13}(即删除捕获组)。

有关如何简化此类正则表达式的更多提示,请参见Lookahead Example: Simple Password Validation