为什么我的字符串违反约束?

时间:2013-11-23 01:21:14

标签: java regex bean-validation

这是我的@ 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 个答案:

答案 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;
}