Java中用于验证用户名的正则表达式

6

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

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

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

4个回答

18

试试这个正则表达式:

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

[a-zA-Z0-9_.-]{3,} 更加准确,因为它包含 "点、破折号和下划线"。请参见 https://dev59.com/dnA75IYBdhLWcg3w7tx6。 - Grambot
2
@TheCapn:我在你写评论的时候已经修复了它。 :-) - RichieHindle
1
你应该为像这样的验证正则表达式添加起始符号 ^ 和结束符号 $(尽管Java的.matches()方法会隐式地执行此操作)。 - ridgerunner

5

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

您应该添加\来进行转义,但请注意,在Java中反斜杠本身被用于转义,因此如果您要在Java文件中编写正则表达式,则应该写

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

请注意双斜杠。

2
不需要转义.,也可能不需要转义-,因为它是类中的最后一个(但我不确定Java如何处理这个)。 - Qtax

4

顺便提一下,如果要求用户名的首字母必须是一个字符,您可以编写以下代码:

try {
    if (subjectString.matches("\\b[a-zA-Z][a-zA-Z0-9\\-._]{3,}\\b")) {
        // Successful match 

    } else {
        // No match 

    }
} catch (PatternSyntaxException ex) {
    // Invalid regex 

}

根据此处的示例


1

这个怎么样:

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

1
我认为如果这些字符在[]中,你不必转义. - _,但除此之外,看起来很好,尽管在发布自己的答案之前,你应该对Richie的答案进行评论。 - 8vius
1
破折号必须被转义,但点则无所谓。 - Emmanuel Bourg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接