当前位置: 首页 > 编程语言 > C#

C#Email地址验证分享

时间:2023-04-10 10:46:32 C#

C#Email地址验证我想澄清一件事。根据客户的要求,我们必须创建一个正则表达式,以允许在电子邮件地址中使用撇号。我的问题根据RFC标准,电子邮件地址是否包含撇号?如果是这样,我如何重新创建正则表达式以允许撇号?下面的正则表达式实现了电子邮件地址的官方RFC2822标准。不建议在实际应用中使用该正则表达式。它表明在使用正则表达式时总是需要在精度和实用性之间进行权衡。(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=^_`{|}~-]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|\[x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|\[x01-x09x0bx0cx0e-x7f])+)])您可以使用简化的:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?是的,只要不在域名中,就允许在电子邮件中使用撇号。这是我写的验证属性。它几乎可以验证每个“原始”电子邮件地址,即local-part@*domain*形式的电子邮件地址。它不支持RFC允许的任何其他更多...创造性结构(此列表绝不是全面的):它应该接受几乎所有可以在不使用引号(")、角度的情况下表达的电子邮件地址方括号('')或方括号([])。不会尝试验证域中最右边的DNS标签是否是有效的TLD(顶级域)。这是因为TLD列表现在是“6”大于(.com,.edu,.gov,.mil,.net,.org)加上2个字母的ISO国家代码要大得多。ICANN实际上每天更新TLD列表,但我怀疑该列表实际上并没有每天更改。此外,ICANN刚刚批准了通用TLD命名空间的大规模扩展。一些电子邮件地址没有您认可的TLD(您知道postmaster@.理论上有效且可邮寄吗?发往该地址的邮件应发送至DNS根区域中的邮政局长。)扩展正则表达式以支持字段文字,应该不会太难。干得好。使用它健康:usingSystem;使用System.ComponentModel.DataAnnotations;使用System.Text.RegularExpressions;命名空间ValidationHelpers{[AttributeUsage(AttributeTargets.Property|AttributeTargets.Field,AllowMultiple=false)]sealedpublicclassEmailAddressValidationAttribute:ValidationAttribute{staticEmailAddressValidationAttribute(){RxEmailAddress=CreateEmailAddressRegex();返回;}privatestaticRegexCreateEmailAddressRegex(){//参考:RFC5321、RFC5322、RFC1035以及勘误表。stringatom=@"([A-Z0-9!#$%&'*+-/=?^_`{|}~]+)";字符串点=@"(.)";stringdotAtom="("+atom+"("+dot+atom+")*"+")";字符串dnsLabel="([AZ]([A-Z0-9-]{0,61}[A-Z0-9])?)";stringfqdn="("+dnsLabel+"("+dot+dnsLabel+")*"+")";stringlocalPart="(?"+dotAtom+")";字符串域="(?"+fqdn+")";字符串emailAddrPattern="^"+localPart+"@"+domain+"$";Regex实例=newRegex(emailAddrPattern,RegexOptions.单行|RegexOptions.IgnoreCase);返回实例;}privatestaticRegexRxEmailAddress;publicoverrideboolIsValid(objectvalue){strings=Convert.ToString(value);boolfValid=string.IsNullOrEmpty;//s)我们将空字段视为有效并将其留给[Required]属性以强制提供它。if(!fValid){匹配m=RxEmailAddress.Match(s);如果(m.Success){字符串emailAddr=m.Value;stringlocalPart=m.Groups["localpart"].Value;stringdomain=m.Groups["domain"].Value;boolfLocalPartLengthValid=localPart.Length>=1&&localPart.Length=1&&domain.Length=1&&emailAddr.Length干杯!以上就是C#学习教程:C#邮箱验证分享的全部内容。网络收藏不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: