我在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
注释会引发错误。但是当用户将该字段留空并单击“提交”时,也会抛出该错误。当字段为空时,为什么会发生这种情况?
答案 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