首页 文章

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

提问于
浏览
1

我在我的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 回答

  • 3

    因为regexp [^|] 只需要匹配一个字符 . 你应该使用量词: [^|]*

    以下是一些测试:

    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
    

相关问题