27

我在 bean 中有一个变量名。我想添加@Pattern验证以仅接受字母数字。

目前,我有这个。

 @NotNull
 @Pattern(regexp = "{A-Za-z0-9}*")
 String name;

但错误是Invalid regular expression. 我试过了[A-Za-z0-9]。但这也不起作用。虽然没有错误。它将任何有效输入显示为失败。

4

2 回答 2

45

你试试这个模式:^[A-Za-z0-9]*$

^[A-Za-z0-9]+$避免空结果。

如果要检查字符串是否仅包含特定字符,则必须添加锚点(^用于字符串的开头,$用于字符串的结尾)以确保您的模式与整个字符串匹配。

花括号仅用于表示重复,例如:如果我想要两个a
a{2}
你不能在里面放字母。唯一可以在大括号之间找到字母的情况是使用 UNICODE 字符类:(\p{L}对于L字母)\p{Greek}、、、\p{Arabian}...

于 2013-07-05T04:24:16.593 回答
7

另外,你可以使用一个可以用在大括号中的字符类,即Alnum。例如,对于长度在 1 到 32 个字符(含)之间的字母数字字符:

@Pattern(regexp = "^[\\p{Alnum}]{1,32}$")

请参阅https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

于 2016-09-19T20:16:50.780 回答