如何在空白字段上跳过@Pattern验证?

时间:2011-10-20 14:39:06

标签: java regex jsf bean-validation

我在JSF托管bean中使用JSR303 bean验证注释来验证文本输入。以下是注释:

@Size(min=0, max=20, message = "Value cannot be more than 20 characters")
@Pattern(regexp = "[^|]", message = "Invalid entry. See field description.")  
private String txt;

在字符串中找到管道字符时,@Pattern注释会引发错误。但是当用户将该字段留空并单击“提交”时,也会抛出该错误。当字段为空时,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

因为正则表达式[^|]只需要匹配一个字符。您应该使用量词:[^|]*

以下是一些测试:

System.out.println(Pattern.matches("[^|]", "")); // false
System.out.println(Pattern.matches("[^|]", "a")); // true
System.out.println(Pattern.matches("[^|]", "aaa")); // false
System.out.println(Pattern.matches("[^|]*", "")); // true
System.out.println(Pattern.matches("[^|]*", "aaa")); // true
System.out.println(Pattern.matches("[^|]*", "a|a")); // false