我正在尝试使用正则表达式检查密码是否为字母数字 但我没有得到我期望的结果。下面的代码有什么问题?
boolean passwordOnlyAlphaNumericCheck = false;
Pattern patternAlphaNumericCheck = Pattern.compile("^[a-zA-Z0-9]$");
Matcher matcherAlphaNumericCheck = patternAlphaNumericCheck.matcher(login.getPassword());
if(matcherAlphaNumericCheck.find())
passwordOnlyAlphaNumericCheck = true;
感谢您的帮助
答案 0 :(得分:3)
您需要添加适合您要求的量词:*
- 0次或更多次出现或+
- 出现1次或更多次。您也可以省略^
和$
并使用String.matches()
:
boolean passwordOnlyAlphaNumericCheck = false;
if(login.getPassword().matches("[a-zA-Z0-9]*"))
passwordOnlyAlphaNumericCheck = true;
要匹配所有Unicode字母,请使用\p{L}
类(可能还有\p{M}
来匹配变音符号):"[\\p{L}\\p{M}0-9]+"
。
login.getPassword().matches("[0-9a-zA-Z]*");
和login.getPassword().matches("[0-9a-zA-Z]");
之间有什么区别?
如果整个字符串只包含 1位数字或字母,.matches("[0-9a-zA-Z]")
将仅返回true。 *
中的[0-9a-zA-Z]*
将允许空字符串,或具有零个或多个字母/数字的字符串。
答案 1 :(得分:1)
您的模式只匹配带有一个字母数字字符的字符串,因为您没有量词并且从开始(^
)到结束($
)显式匹配。
为1 +场比赛追加+
,或为您的角色等级追加*
0+场比赛。
您还可以使用脚本:\\p{Alnum}
而不是繁琐的字符类。
例如:
^\\p{Alnum}{8}$
将匹配由 8 字母数字字符构成的String
^\\p{Alnum}{8,}$
将匹配由 8个或更多字母数字字符组成的String
^\\p{Alnum}{8,10}$
将匹配由{strong> 8到10个字母数字字符构成的String
^\\p{Alnum}+$
将匹配由 1个或更多 alnums组成的String
^\\p{Alnum}*$
将匹配由任意数量的alnums组成的空 String
或String
答案 2 :(得分:1)
此功能将帮助确保您只需要所需的字母数字。
public static boolean isAlphanumeric(String value){
if (isValueEmpty(value)) {
return false;
}
return value.matches("^[a-zA-Z_0-9]*$");
}
public static boolean isValueEmpty(String param){
return param == null || param.isEmpty();
}
答案 3 :(得分:0)
使用此regex
表达式Demo Here For Regex
"^[a-zA-Z0-9]*$ "
或"^[a-zA-Z0-9]+$"
而不是
"^[a-zA-Z0-9]$ // * or + should be added at last
所以,这可能对你有用
Pattern patternAlphaNumericCheck = Pattern.compile("^[a-zA-Z0-9]*$");
OR
Pattern patternAlphaNumericCheck = Pattern.compile("^[a-zA-Z0-9]+$");
答案 4 :(得分:0)
试试这个正则表达式:
private final String nonAlphanumericRegex = ".*\\W.*";
if (Pattern.matches(nonAlphanumericRegex, YOUR_STRING))
throw IllegalArgumentException()