空白字段上的@Pattern 验证

@Pattern validation on a blank field

我正在使用验证注释来验证电子邮件字段,这里的电子邮件字段不是强制性的,当我点击提交时,它正在验证并在该字段为空时抛出错误消息,

注释如下:

@Pattern(regexp = "^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$", 
            message = "registration.label.useremailformat.invalidformat")
@Size(min = 6, max = 20, message = "registration.label.useremail.length")
@SafeHtml
private String userEmailId;

如何在电子邮件字段为空时跳过@Pattern 验证并仅在给定值时进行验证?任何帮助将不胜感激。

修改您的正则表达式以允许空字符串 删除 @Size:

@Pattern("^$|(<<old regexp>>)")
@SafeHtml
private String userEmailId;

... 其中 <<old regex>> 是您当前冗长的正则表达式的占位符。

似乎问题是 @Size 限制不允许提交表单,即使在将整个正则表达式模式设为可选之后也是如此。

我建议的解决方法是将大小限制移动到正则表达式模式中:

regexp = "^(?:(?=.{6,20}$)[_A-Za-z0-9-+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+‌​‌​)*(\.[A-Za-z‌​]{2,}))?$"

外部 (?:...)? 包含您的模式,使匹配空字符串成为可能,而 (?=.{6,20}$) 是一个积极的前瞻性 - 在匹配模式之前 - 检查是否有 6 到 20 个字符在文中。如果少或多,则匹配失败。

唯一的缺点是只能显示一条错误消息。