You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式实现:禁止邮箱用户名首尾出现._-特殊字符

邮箱校验正则优化实现

你原有正则的问题出在用户名部分的匹配规则[a-zA-Z0-9._-]+没有对特殊字符的位置做限制,允许.、_、-出现在首尾位置,我们只需要重写用户名段的匹配逻辑即可。

最终可用正则

const emailValidateReg = /^[a-zA-Z0-9]+(?:[._-][a-zA-Z0-9]+)*@[a-zA-Z0-9]+\.[a-zA-Z]{2,}$/

规则编写逻辑

整个正则完全匹配你提出的校验要求,逐段逻辑如下:

  • ^[a-zA-Z0-9]+:匹配用户名开头,强制要求首字符必须是大小写字母或数字,从根源上禁止.、_、-出现在用户名首位
  • (?:[._-][a-zA-Z0-9]+)*:匹配用户名中间部分,规则为:
    • 每出现一次.、_、-三类特殊字符,后面必须紧跟至少1个字母/数字,从规则上杜绝特殊字符出现在用户名末尾的可能,同时自动拦截连续特殊字符的非法格式(比如na..me@xx.com这类不符合常规邮箱规范的格式也会被判定无效)
    • 非捕获分组(?:)仅做规则匹配,不额外缓存分组内容,匹配性能更高
    • 分组后的量词*代表该段规则可以出现0次或多次:既支持纯字母数字的用户名(比如user123@xx.com),也支持中间穿插多组特殊字符的用户名(比如user.name_01-test@xx.com)
  • @[a-zA-Z0-9]+\.[a-zA-Z]{2,}$:保留你原有域名段的匹配逻辑,@后匹配至少1段字母/数字组成的域名主体,加.后匹配至少2位的域名后缀。

测试用例匹配结果

对照你给出的样例逐一校验,结果完全符合预期:

  • 无效样例(全部匹配失败):
    • _name.name_@email.com
    • -name.name-@email.com
    • name.@email.com
    • name_@email.com
    • name-@email.com
    • .name@email.com
    • _name@email.com
    • -name@email.com
  • 有效样例(全部匹配成功):
    • name.name@email.com
    • name_name@email.com
    • name-name@email.com

内容的提问来源于stack exchange,提问作者Mahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:31:11