2011-10-20 40 views
1

我在我的JSF托管bean中使用JSR303 bean验证注释来验证文本输入。这里有注解:当一个管道字符在字符串中发现如何跳过空白字段的@Pattern验证?

@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注释抛出一个错误。但是,当用户将该字段留空并单击提交时,该错误也会被抛出。为什么这个领域是空白的时候呢?

+0

你可能有在提交时TXT是一个空的问题。尝试... txt =“”为咯咯。 –

回答

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 
+1

非常感谢你! – sotn