【问题标题】:Regular Expression in Java for validating usernameJava中用于验证用户名的正则表达式
【发布时间】:2011-10-10 13:53:57
【问题描述】:

我正在使用以下规则尝试 Java 中的用户名链:

  • 长度 >=3
  • 有效字符:a-z、A-Z、0-9、点、破折号和下划线。

有人可以帮我处理正则表达式吗?

【问题讨论】:

    标签: java regex validation


    【解决方案1】:

    试试这个正则表达式:

    ^[a-zA-Z0-9._-]{3,}$
    

    【讨论】:

    • [a-zA-Z0-9_.-]{3,} 更准确,因为他想包含“点破折号和下划线”。见stackoverflow.com/questions/3028642/…
    • @TheCapn:我在你写评论时修复了它。 :-)
    • 你应该为像这样的验证正则表达式添加 start ^ 和 end-of-string $ 锚点(尽管 Java .matches() 方法确实会隐式执行此操作)。
    【解决方案2】:

    BTW,如果有额外要求:用户名的首字母必须是字符,可以写

    try {
        if (subjectString.matches("\\b[a-zA-Z][a-zA-Z0-9\\-._]{3,}\\b")) {
            // Successful match 
    
        } else {
            // No match 
    
        }
    } catch (PatternSyntaxException ex) {
        // Invalid regex 
    
    }
    

    基于示例here

    【讨论】:

      【解决方案3】:

      怎么样:

          username.matches("[a-zA-Z0-9.\\-_]{3,}")
      

      【讨论】:

      • 如果 .-_ 字符在 [] 中,我认为您不必转义它们,但除此之外它看起来还不错,尽管您应该在发布您的之前对 Richie 的回答发表评论拥有。
      • 破折号必须转义,但点号没关系。
      【解决方案4】:

      Sakiroka 解决方案是对的,但是忘记了破折号,应该转义点。

      您应该添加 \ 来转义它,但请注意,在 Java 中,反斜杠本身就是用来转义的,所以如果您在 java 文件中编写正则表达式,您应该编写

      String regex = "[a-zA-Z0-9\\._\\-]{3,}"; 
      

      注意双反斜线。

      【讨论】:

      • 不需要转义.,也可能不需要转义-,因为它是班级的最后一个(但我不确定Java如何处理这个问题)。
      猜你喜欢
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 2021-09-06
      • 2012-08-14
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      相关资源
      最近更新 更多