我正在使用验证注释来验证电子邮件字段,此处电子邮件字段不是强制性的,当我点击提交时,它仍在验证并在字段为空时抛出错误消息,
以下是注释:
@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验证并仅在给出值时验证?任何帮助都将受到高度赞赏。
答案 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个字符文本。如果更少或更多,则匹配失败。
唯一的缺点是你只能用它显示一条错误信息。