Active Directory账号正则匹配求助:account@domain格式匹配失败
解决Active Directory账号正则匹配问题
咱们先拆解下你当前正则的问题,再构建一个能匹配testuser@test.local这类AD账号(包含多级子域名,比如testuser@test.local.country.city.street)的正确表达式:
你的当前正则存在的核心问题
- 语法完全错误:
\w[\w\.\- ]*$/@/^[a-zA-Z][a-zA-Z0-9\-\.]{0,61}[a-zA-Z]这种写法不是标准正则语法,/@/不是正则的合法分隔符,而且开头的$和结尾的^锚点位置颠倒,导致根本无法匹配完整的账号格式。 - 缺少关键结构:没有处理
@这个用户名和域名的核心分隔符,也没有划分清楚两部分的规则边界。
AD账号(UPN格式)的规则梳理
要匹配正确的格式,得先明确AD用户主体名称(UPN)的基本规则:
- 用户名部分:允许字母、数字、下划线、连字符、点,部分特殊字符也支持(比如
!#$%&'*+/=?^_{|}~`),长度最多64字符。 - 必须包含唯一的
@分隔符。 - 域名部分:支持多级子域,每一级需满足:开头和结尾为字母/数字,中间可含连字符,单级最长63字符;顶级域名(比如
local、com)长度至少2字符。
正确的正则表达式
^[a-zA-Z0-9_\-.]{1,64}@([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$
正则各部分解释
^:匹配字符串的起始位置,确保从账号开头开始匹配[a-zA-Z0-9_\-.]{1,64}:匹配用户名,允许常见的合法字符,长度限制在1-64之间(符合AD的用户名长度要求)@:强制匹配用户名和域名之间的分隔符([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+:匹配多级子域名的每一级,确保每级开头结尾是字母/数字,中间可含连字符,每级最长63字符,末尾带点,支持重复多次(对应多级子域)[a-zA-Z]{2,}:匹配顶级域名,长度至少2字符(比如local、city)$:匹配字符串的结束位置,确保没有多余字符
扩展说明
如果需要支持AD允许的更多特殊用户名字符,可以把用户名部分替换为:
[a-zA-Z0-9_\-.!#$%&'*+/=?^_`{|}~]{1,64}
内容的提问来源于stack exchange,提问作者Thypari
相关产品推荐
相关产品推荐

