【问题标题】:Regex for checking if a string is strictly alphanumeric用于检查字符串是否严格字母数字的正则表达式
【发布时间】:2012-06-29 19:10:27
【问题描述】:

如何检查字符串是否仅包含数字和字母,即。是字母数字吗?

【问题讨论】:

标签: java regex alphanumeric


【解决方案1】:

使用字符类:

^[[:alnum:]]*$

【讨论】:

  • 这是正确的想法,但是POSIX character class syntaxnot valid in Java,并且问题被标记为Java。您的答案的等效 Java 语法是 "^[\\p{Alnum}]*$",如 below 所述。 (如果网站指南认为此类标记不够显眼,请告诉我,我会在问题本身中添加评论。:))
【解决方案2】:

查看Pattern的文档。

假设 US-ASCII 字母(a-z、A-Z),您可以使用 \p{Alnum}

检查一行是否仅包含此类字符的正则表达式是"^[\\p{Alnum}]*$"

这也匹配空字符串。排除空字符串:"^[\\p{Alnum}]+$"

【讨论】:

    【解决方案3】:

    考虑到您要检查 ASCII 字母数字字符,试试这个: "^[a-zA-Z0-9]*$"。在String.matches(Regex)中使用这个RegEx,如果字符串是字母数字则返回true,否则返回false。

    public boolean isAlphaNumeric(String s){
        String pattern= "^[a-zA-Z0-9]*$";
        return s.matches(pattern);
    }
    

    如果有帮助,请阅读本文以了解有关正则表达式的更多详细信息:http://www.vogella.com/articles/JavaRegularExpressions/article.html

    【讨论】:

    • -1 因为这并不涵盖所有字母数字字符。 M42的反应更好。
    • if不好用,最好是return s.matches(pattern)
    • * 允许空字符串,使用 + ,像这样:^[a-zA-Z0-9]+$
    • 你真的需要在开头和结尾添加边界匹配器(^,$)吗?似乎String pattern="[a-zA-Z0-9]+"; 的行为方式相同,因为 + 是贪婪的。
    • 需要正则表达式来检查字符串是否不包含“test”并且只包含字母和空格。请帮忙
    【解决方案4】:
    Pattern pattern = Pattern.compile("^[a-zA-Z0-9]*$");
    Matcher matcher = pattern.matcher("Teststring123");
    if(matcher.matches()) {
         // yay! alphanumeric!
    }
    

    【讨论】:

      【解决方案5】:

      试试这个 [0-9a-zA-Z]+ only alpha and num with one char at-least..

      可能需要修改,所以测试一下

      http://www.regexplanet.com/advanced/java/index.html

      Pattern pattern = Pattern.compile("^[0-9a-zA-Z]+$");
      Matcher matcher = pattern.matcher(phoneNumber);
      if (matcher.matches()) {
      
      }
      

      【讨论】:

        【解决方案6】:

        为了兼容 unicode:

        ^[\pL\pN]+$
        

        在哪里

        \pL stands for any letter
        \pN stands for any number
        

        【讨论】:

        • 不工作。给予:java.util.regex.PatternSyntaxException:索引 5 附近的 Unicode 属性不正确。
        • IntelliJ 还建议 \\p{Alnum}(但这是在 Java 13 中)
        • @Erk 我相信自 Java 7 以来就已经存在:docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
        • @slugmandrew,很高兴知道。我在对冲。似乎早在 java 6 就有一个。但不是 java 5——它甚至似乎没有 Pattern 类。
        【解决方案7】:

        现在是 2016 年或更晚,事情有了进展。这匹配 Unicode 字母数字字符串:

        ^[\\p{IsAlphabetic}\\p{IsDigit}]+$
        

        参见the reference(“Unicode 脚本、块、类别和二进制属性的类”部分)。还有 this answer 我觉得很有帮助。

        【讨论】:

          【解决方案8】:

          100% 字母数字 RegEx(它仅包含字母数字,甚至不包含整数和字符,仅包含字母数字)

          例如:

          特殊字符(不允许)
          123(不允许)
          asdf(不允许)
          1235asdf(允许)


          String name="^[^<a-zA-Z>]\\d*[a-zA-Z][a-zA-Z\\d]*$";
          

          【讨论】:

          • 所以a12 不是字母数字?
          【解决方案9】:

          要检查字符串是否为字母数字,您可以使用遍历字符串中的每个字符并检查它是否为字母数字的方法。

              public static boolean isAlphaNumeric(String s){
                      for(int i = 0; i < s.length(); i++){
                              char c = s.charAt(i);
                              if(!Character.isDigit(c) && !Character.isLetter(c))
                                      return false;
                      }
                      return true;
              }
          

          【讨论】:

            【解决方案10】:

            如果你也想包含外文字母,你可以试试:

            String string = "hippopotamus";
            if (string.matches("^[\\p{L}0-9']+$")){
                string is alphanumeric do something here...
            }
            

            或者,如果您想允许特定的特殊字符,但不允许其他任何字符。比如#或者space,你可以试试:

            String string = "#somehashtag";
            if(string.matches("^[\\p{L}0-9'#]+$")){
                string is alphanumeric plus #, do something here...
            }
            

            【讨论】:

              【解决方案11】:

              要考虑所有 Unicode 字母和数字,可以使用 Character.isLetterOrDigit。在 Java 8 中,这可以与 String#codePointsIntStream#allMatch 结合使用。

              boolean alphanumeric = str.codePoints().allMatch(Character::isLetterOrDigit);
              

              【讨论】:

                【解决方案12】:

                要包含[a-zA-Z0-9_],您可以使用\w

                所以myString.matches("\\w*")。 (.matches 必须匹配整个字符串,所以不需要^\\w*$.find 可以匹配子字符串)

                https://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-03-30
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-09-12
                  • 2018-08-20
                  • 1970-01-01
                  相关资源
                  最近更新 更多