Java @空白字段上的模式验证
我正在使用验证注释验证电子邮件字段,这里的电子邮件字段不是强制性的,但当我单击提交时,它正在验证并在字段为空时抛出错误消息 以下是注释:Java @空白字段上的模式验证,java,regex,bean-validation,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.invalidforma
@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;
当email字段为空时,如何跳过@Pattern验证,并仅在给定值时进行验证?非常感谢您的帮助。修改您的regexp以允许空字符串并删除
@Size
:
@Pattern("^$|(<<old regexp>>)")
@SafeHtml
private String userEmailId;
@Pattern(“^$|()”)
@安全HTML
私有字符串userEmailId;
。。。其中,
是当前冗长regexp的占位符。问题似乎在于,@Size
限制不允许表单提交,即使在使整个regex模式成为可选模式之后也是如此
我建议的解决方法是将大小限制移到regex模式中:
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个字符。如果数量较少或较多,则匹配失败
唯一的缺点是只能显示一条错误消息。字符类中
-
的位置错误模式需要显示一些文本。尝试regexp=“^(?:[[u A-Za-z0-9-+]+(\\.[u A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,}])?$”
。另外,请检查min
参数。@Wiktor Stribiżew-不显示任何错误消息,但表单未收到提交消息,可能是因为@Size
限制。如果您删除大小检查并只使用regexp=“^(?:(?=。{6,20}$)[[u A-Za-z0-9-+]+(\\.[u A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z0-9]+])(\\\.[A-Za-z]),该怎么办]{2,}]?$“
?请参阅。我也删除了@Size,但仍然无法工作