正则表达式:支持含连字符FQDN的邮箱地址检测
解决邮箱正则支持用户名和域名含连字符的问题
你的正则无法匹配带连字符的域名,核心问题出在域名部分的规则限制过严。修改后的正则可以同时支持用户名和域名包含连字符,且更符合域名规范:
const string Pattern = @"(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@" + @"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\." + @"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|" + @"([a-zA-Z0-9][\w-]*[a-zA-Z0-9]\.)+[a-zA-Z0-9]{2,})";
修改关键点:
- 域名子域名规则调整:将原正则中域名部分的
([a-zA-Z]+[\w-]+\.)+改为([a-zA-Z0-9][\w-]*[a-zA-Z0-9]\.)+- 允许子域名以数字开头(符合域名规范)
- 支持子域名包含任意数量的连字符,同时避免子域名以连字符开头或结尾的非法情况
- 支持单个字符的子域名(如
a.com这类格式)
- 顶级域名规则放宽:将
[a-zA-Z]{2,4}改为[a-zA-Z0-9]{2,},适配现在越来越多的长顶级域名(如.xyz、.online),同时允许顶级域名包含数字
注:你的正则中用户名部分已经支持连字符([\w-]包含连字符),无需额外修改。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

