java正则表达式匹配字母数字字符串

时间:2016-05-06 10:32:10

标签: java regex match

我正在尝试使用正则表达式检查密码是否为字母数字 但我没有得到我期望的结果。下面的代码有什么问题?

boolean passwordOnlyAlphaNumericCheck = false;
Pattern patternAlphaNumericCheck = Pattern.compile("^[a-zA-Z0-9]$");
Matcher matcherAlphaNumericCheck = patternAlphaNumericCheck.matcher(login.getPassword());
if(matcherAlphaNumericCheck.find())
  passwordOnlyAlphaNumericCheck = true;

感谢您的帮助

5 个答案:

答案 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组成的 StringString

答案 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()