休眠验证器:@Email接受ask @ codingdic为有效吗?
我正在使用@Email
注释来验证电子邮件地址。我遇到的问题是它正在接受诸如`ask@stcodingdic有效的电子邮件地址之类的东西。我猜这是因为他们想支持Intranet地址,但是我似乎找不到标志,因此它会检查扩展名。
我是否真的需要切换到@Pattern
(以及有关灵活的电子邮件模式的任何建议)还是缺少什么?
回答:
实际上,@Email
从Hibernate Validator
内部使用regexp。您可以根据该正则表达式轻松定义自己的约束,并根据需要进行修改(请注意+
的结尾DOMAIN
):
@Target({ElementType.FIELD, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
@Pattern(regexp = Constants.PATTERN, flags = Pattern.Flag.CASE_INSENSITIVE)
public @interface EmailWithTld {
String message() default "Wrong email";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
interface Constants {
static final String ATOM = "[a-z0-9!#$%&'*+/=?^_`{|}~-]";
static final String DOMAIN = "(" + ATOM + "+(\\." + ATOM + "+)+";
static final String IP_DOMAIN = "\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\]";
static final String PATTERN =
"^" + ATOM + "+(\\." + ATOM + "+)*@"
+ DOMAIN
+ "|"
+ IP_DOMAIN
+ ")$";
}
以上是 休眠验证器:@Email接受ask @ codingdic为有效吗? 的全部内容, 来源链接: utcz.com/qa/400616.html