Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证基于UTF8字符的电子邮件_C#_Email Validation - Fatal编程技术网

C# 验证基于UTF8字符的电子邮件

C# 验证基于UTF8字符的电子邮件,c#,email-validation,C#,Email Validation,我尝试使用以下正则表达式验证电子邮件(UTF8) Regex.IsMatch(电子邮件地址, @“([\w-\.]+)@(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.}.[0-9]{1,3}.\)([\w-]+\.+)([a-zA-Z]{2,4}.[0-9]{1,3}.$”,RegexOptions.CultureInvariant) 它返回false表示“ä”pfel@domain.com“ 任何关于如何改进的建议。简单的答案是,你不想这样做:正则表达式是验证电子邮件

我尝试使用以下正则表达式验证电子邮件(UTF8)

Regex.IsMatch(电子邮件地址,
@“([\w-\.]+)@(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.}.[0-9]{1,3}.\)([\w-]+\.+)([a-zA-Z]{2,4}.[0-9]{1,3}.$”,RegexOptions.CultureInvariant)

它返回false表示“ä”pfel@domain.com“


任何关于如何改进的建议。

简单的答案是,你不想这样做:正则表达式是验证电子邮件地址的可怕方式

您的具体问题的答案是,如果您愿意阻止有效地址并允许无效地址,您希望使用
[\p{L}\p{M}\p{N}]
而不是
\w
来匹配地址用户名部分的Unicode单词字符

  • UTF-8与此无关,您正在验证字符串,而不是其特定编码

  • 您的正则表达式实际上为
    “ä返回truepfel@domain.com“
    (带或不带
    CultureInvariant
    选项)。尝试
    Console.Write(Regex.IsMatch(“äpfel@domain.com“,@”^([\w-\.]+)@(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[124;([\ w-]+])([a-zA-Z]{2,4}{124;[0-9]{1,3}.(\]?)$”,RegexOptions.CultureInvariant))本身,您将获得
    true

  • 您将在所有IDN上失败,如
    info@οñτοπα.Δπθ.gr
    ,如果您关心非ASCiI限制的电子邮件地址,您可能希望包括它们。(如果你想排除被禁止的混淆,你会变得非常复杂)

  • 其他人指出,使用正则表达式验证电子邮件存在一些问题,但这些问题归结为:

  • 实际的电子邮件语法比人们想象的要复杂(甚至在我们处理非ASCII扩展之前)。e、 你知道Abc吗\@def@example.com
  • 是有效的电子邮件地址吗?事实上,这是RFC3696中给出的有效地址的一个例子

  • 如果您努力构建一个完美的验证器(这是可能的),那将是一种浪费。您的电子邮件软件可能无法处理所有这些问题(例如,
    Abc)\@def@example.com
    以上内容无法与许多软件配合使用)然后许多有效的电子邮件地址实际上就不正确了


  • 但是无论如何,我运行你的代码时得到了
    true
    ,错误在别处。

    请参阅使用regex验证电子邮件比看起来更复杂:@StevieB谢谢,我已经浏览了链接。但我认为将选项设置为“RegexOptions.CultureInvariant”并在regex中指定“\w”将验证所有UTF8单词。为什么您认为regex是验证电子邮件地址的可怕方式?你有什么更好的解决方案吗?电子邮件地址的完整合法语法构成了一个极其复杂的正则表达式(我见过的最简单的符合RFC-822的正则表达式只有一页半长)。如果你想检查一个地址是否有效,只需给它发送一封电子邮件,看看它是否会反弹。状态机更适合这个任务。当然会更详细一点。@Mark,当然,但它不可扩展。。。很难构建正确的正则表达式,但只要你有它,它就会运行得很好。@StevieB,正则表达式只是在幕后生成一个状态机;)感谢您为我指出了正确的方向,由于编码问题,我收到了不正确的电子邮件字符串。