Как пропустить проверку @Pattern на пустом поле? - PullRequest
1 голос
/ 20 октября 2011

Я использую аннотации проверки bean-компонента JSR303 в моем управляемом bean-компоненте JSF для проверки ввода текста.Вот аннотации:

@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 голосов
/ 21 октября 2011

Поскольку регулярному выражению [^|] требуется ровно один символ для сопоставления.Вы должны использовать квантификатор: [^|]*

Вот несколько тестов:

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
...