我正在使用@Email注释来验证电子邮件地址。我遇到的问题是它正在接受诸如`ask@stcodingdic有效的电子邮件地址之类的东西。我猜这是因为他们想支持Intranet地址,但是我似乎找不到标志,因此它会检查扩展名。
@Email
我是否真的需要切换到@Pattern(以及有关灵活的电子邮件模式的任何建议)还是缺少什么?
@Pattern
实际上,@Email从Hibernate Validator 内部使用regexp。您可以根据该正则表达式轻松定义自己的约束,并根据需要进行修改(请注意+的结尾DOMAIN):
+
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 + ")$"; }