Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @空白字段上的模式验证_Java_Regex_Bean Validation - Fatal编程技术网

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,但仍然无法工作