Vaadin 14 Flow EmailField 校验异常:特殊邮箱格式被判定为合法
问题解答:Vaadin 14.6.8 EmailField 宽松校验问题
该类邮箱格式的合法性判定
你提到的barney.@gmail.com、.@gmail.com均不属于合法的电子邮箱地址:
- 按照RFC 5322官方邮件格式规范,邮箱地址
@符号前的本地部分,禁止出现开头/结尾直接是点号、连续多个点号的情况,上述两个案例都违反了该规则。
Vaadin EmailField 判定合法的原因
Vaadin 14.x 版本的EmailField组件默认直接复用浏览器原生<input type="email">的校验逻辑,而原生校验的规则设计得较为宽松,允许本地部分首尾带点的格式通过,才会出现你遇到的情况。
修复方案
如果需要严格符合通用邮箱使用规范的校验,可以为组件添加自定义校验器覆盖默认逻辑,参考代码如下:
EmailField emailField = new EmailField(); // 自定义严格校验规则 emailField.addValidator(email -> { if (email == null || email.isBlank()) { return ValidationResult.ok(); } // 正则禁止本地部分首尾带点、连续点号,符合绝大多数邮件服务的注册规则 String strictEmailPattern = "^[a-zA-Z0-9_+\\-]+(?:\\.[a-zA-Z0-9_+\\-]+)*@[a-zA-Z0-9\\-]+(?:\\.[a-zA-Z0-9\\-]+)*\\.[a-zA-Z]{2,}$"; return email.matches(strictEmailPattern) ? ValidationResult.ok() : ValidationResult.error("请输入合法的邮箱地址"); });
内容的提问来源于stack exchange,提问作者Barney_IT
相关产品推荐
相关产品推荐

