@Pattern验证空白字段

时间:2016-06-14 12:29:37

标签: java regex bean-validation

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

以下是注释:

@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验证并仅在给出值时验证?任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

似乎问题是即使在使整个正则表达式模式可选后,@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个字符文本。如果更少或更多,则匹配失败。

唯一的缺点是你只能用它显示一条错误信息。