2013-11-23 2 views
1

Это мой @ Pattern.List:Почему моя строка нарушает ограничения?

@NotNull 
@Pattern.List({ 
     @Pattern(regexp="[A-Z][a-z]+\\s[A-Z][a-z]+", message="Name contains invalid characters."), 
     @Pattern(regexp="[A-Z][a-z]+", message="Name contains invalid characters.") 
     }) 
public String getName() { 
    return name; 
} 

Строка Северная Дакота.

Я признаю, что я не лучший в регулярном выражении, и я новичок в этом, но разве это не должно работать?

Он работает, если я удаляю аннотацию @Pattern.

Это ошибка:

Caused by: javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'prePersist'. Please refer to embedded ConstraintViolations for details.

+1

Вам не нужны скобки вокруг '[A-Z] [a-z]' для обозначения знака '+', применимого к обоим из них? –

+0

Я думаю, что это применимо только к [a-z] Мне нужно только одну заглавную букву в начале. –

+0

Так вот, никогда не думай. –

ответ

3

Вы, кажется, ожидать, что, когда вы предоставляете @Pattern.List, что значение должно соответствовать затем по меньшей мере, один шаблон списка. Но это не так. Значение должно соответствовать любому схеме списка. В случае «Северной Дакоты» совпадает только первый образец, а второй нет. Следовательно, вы продолжаете видеть эту ошибку нарушения ограничения.

@Pattern.List Следует использовать только для шаблонов, которые не могут быть представлены одним шаблоном, или для каждого требуется подробное сообщение (например, сложное совпадение паролей на разных типах символов).

В этом конкретном случае вам просто нужно упростить регулярное выражение в один шаблон, в котором вы указываете второе слово как необязательное, поместив его в (...)?.

@NotNull 
@Pattern(regexp="[A-Z][a-z]+(\\s[A-Z][a-z]+)?", message="Name contains invalid characters.") 
public String getName() { 
    return name; 
} 
Смежные вопросы