关于修改邮箱验证正则表达式以强制主机名包含句点的技术咨询
如何修改正则表达式以强制邮箱主机名包含句点?
嗨,我来帮你搞定这个正则调整的问题~你的现有正则已经完美覆盖了除第7条之外的所有验证规则,唯独没法拦截像abc@efg这种没有域名后缀的邮箱地址对吧?别担心,只需要对主机名部分做一处微小修改就能解决。
修改思路
原正则的主机名部分允许0个带句点的子段(也就是可以只有纯字符串的主机名),我们只需要把这个“可选匹配”改成“至少匹配一次”,就能强制主机名包含至少一个句点。
修改后的完整正则
/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/
关键修改点对比
- 原主机名末尾的匹配规则:
(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(*表示0次或多次,允许无句点) - 修改后的规则:
(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(+表示1次或多次,强制至少一个句点)
验证效果
调整后,这个正则会:
- 正常通过符合所有规则的邮箱,比如
valid.user@sub.domain.com - 拦截
abc@efg这类无句点的主机名 - 保留原有的所有验证逻辑:用户名不能以
.开头/结尾、用户名长度≤64、完整邮箱长度≤254、主机名以字母/数字开头且不以.结尾、主机名单段长度≤63等
内容的提问来源于stack exchange,提问作者Amogh Hegde
相关产品推荐
相关产品推荐

