【发布时间】:2011-10-10 13:53:57
【问题描述】:
我正在使用以下规则尝试 Java 中的用户名链:
- 长度 >=3
- 有效字符:a-z、A-Z、0-9、点、破折号和下划线。
有人可以帮我处理正则表达式吗?
【问题讨论】:
标签: java regex validation
我正在使用以下规则尝试 Java 中的用户名链:
有人可以帮我处理正则表达式吗?
【问题讨论】:
标签: java regex validation
试试这个正则表达式:
^[a-zA-Z0-9._-]{3,}$
【讨论】:
^ 和 end-of-string $ 锚点(尽管 Java .matches() 方法确实会隐式执行此操作)。
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。
【讨论】:
怎么样:
username.matches("[a-zA-Z0-9.\\-_]{3,}")
【讨论】:
Sakiroka 解决方案是对的,但是忘记了破折号,应该转义点。
您应该添加 \ 来转义它,但请注意,在 Java 中,反斜杠本身就是用来转义的,所以如果您在 java 文件中编写正则表达式,您应该编写
String regex = "[a-zA-Z0-9\\._\\-]{3,}";
注意双反斜线。
【讨论】:
.,也可能不需要转义-,因为它是班级的最后一个(但我不确定Java如何处理这个问题)。