SQL Server存储过程迁移Snowflake:复刻C# MailAddress功能
C# MailAddress类的邮箱格式校验规则
C#的MailAddress类在解析邮箱地址时,会执行以下格式校验逻辑,整体遵循RFC 5322标准并包含微软的特定实现细节:
- 核心结构校验:必须包含且仅包含一个
@符号,将地址明确分割为本地部分(@左侧)和域名部分(@右侧),两部分均不能为空 - 本地部分校验:
- 长度限制:最多64个字符
- 允许字符范围:大小写英文字母(A-Z、a-z)、数字(0-9),以及特殊字符
!#$%&'*+-/=?^_{|}~` - 特殊字符包裹规则:若本地部分包含空格、逗号、双引号等未在允许列表内的字符,必须用双引号完整包裹(例如
"john.doe+tag"@example.com、"john,doe"@example.com),但引号内部不能出现未转义的双引号 - 禁止未授权字符:未在允许列表内且未被双引号包裹的字符(如
()<>[]:;@,`)会直接导致校验失败
- 域名部分校验:
- 长度限制:最多255个字符
- DNS域名规则:需符合合法DNS域名格式——由多个标签组成,标签间用
.分隔,每个标签最多63个字符,仅允许大小写英文字母、数字和-,且标签不能以-开头或结尾 - IP地址支持:允许以方括号包裹的合法IPv4/IPv6地址作为域名(例如
user@[192.168.1.100]、user@[IPv6:2001:db8::1])
- 整体长度限制:整个邮箱地址的总字符数不能超过256个
- 附加校验细节:
- 大小写不敏感:校验过程不区分英文字母大小写,解析后会自动将域名部分转换为小写,本地部分保留原始输入的大小写
- 首尾空格限制:整个地址不能有前导或尾随空格,除非空格位于本地部分的双引号包裹范围内
内容的提问来源于stack exchange,提问作者Ankit Srivastava
相关产品推荐
相关产品推荐

