【问题标题】:java regex match for alphanumeric string字母数字字符串的java正则表达式匹配
【发布时间】:2016-09-01 09:30:29
【问题描述】:

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

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

感谢您的帮助

【问题讨论】:

  • "^[a-zA-Z0-9]+$""^[a-zA-Z0-9]*" - 你忘记了量词。您可以删除^$ 并使用.matches()
  • @WiktorStribiżew 它在我使用login.getPassword().matches("[0-9a-zA-Z]*"); 时有效,但login.getPassword().matches("[0-9a-zA-Z]*");login.getPassword().matches("[0-9a-zA-Z]"); 之间有什么区别
  • 查看更多解释。

标签: java regex match


【解决方案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();
}

【讨论】:

    【解决方案2】:

    试试这个正则表达式:

    private final String nonAlphanumericRegex = ".*\\W.*";
    if (Pattern.matches(nonAlphanumericRegex, YOUR_STRING))
        throw IllegalArgumentException()
    

    【讨论】:

      【解决方案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]"); 有什么区别?

      .matches("[0-9a-zA-Z]") 只会在整个字符串仅包含 1 个数字或字母时返回 true。 [0-9a-zA-Z]* 中的 * 将允许空字符串,或 具有零个或多个字母/数字的字符串。

      【讨论】:

        【解决方案4】:

        使用这个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]*$");
        

        Pattern patternAlphaNumericCheck = Pattern.compile("^[a-zA-Z0-9]+$");
        

        【讨论】:

          【解决方案5】:

          您的模式将仅匹配带有 一个 字母数字字符的字符串,因为您没有量词并且从开始 (^) 到结束 ($) 显式匹配。

          + 追加1+ 匹配,或* 追加0+ 匹配到您的角色类。

          您也可以使用脚本:\\p{Alnum},而不是繁琐的字符类。

          例如:

          • ^\\p{Alnum}{8}$ 将匹配由 8 个字母数字字符组成的 String
          • ^\\p{Alnum}{8,}$ 将匹配由 8 个或更多 字母数字字符组成的 String
          • ^\\p{Alnum}{8,10}$ 将匹配由 8 到 10 个字母数字字符组成的 String
          • ^\\p{Alnum}+$ 将匹配由 1 个或多个 alnums
          • 组成的 String
          • ^\\p{Alnum}*$ 将匹配 empty StringString任意数量 的 alnum 组成

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-08-29
            • 2013-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多