c# - 电子邮件验证 : converting a regular expression written in PHP (preg) to . NET(正则表达式)

标签 c# .net php asp.net regex

基于这个答案... Using a regular expression to validate an email address

是什么让我来到这个网站... http://fightingforalostcause.net/misc/2006/compare-email-regex.php

我想将此正则表达式用于我的 ASP.NET MVC 应用程序的电子邮件验证:

/^[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d++)?$/iD

不幸的是,我得到了这个错误

System.ArgumentException was unhandled by user code Message="parsing \"/^[-_a-z0-9\'+$^&%=~!?{}]++(?:\.[-_a-z0-9\'+$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?

有没有人将其转换为可供 .NET 的 Regex 类使用,或者是否有另一个 .NET 正则表达式类更适合 PHP 的 preg_match 函数?

最佳答案

.NET 中的正则表达式的问题是不支持所有格量​​词。如果你删除那些,它会起作用。这是作为 C# 字符串的正则表达式:

@"^[-_a-z0-9\'+*$^&%=~!?{}]+(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d+)?$"

这是一个基于 the page you linked to 的测试台,包括所有应该匹配的字符串和不应该匹配的前三个字符串:

using System;
using System.Text.RegularExpressions;

public class Program
{
    static void Main(string[] args)
    {
        foreach (string email in new string[]{
            "l3tt3rsAndNumb3rs@domain.com",
            "has-dash@domain.com",
            "hasApostrophe.o'leary@domain.org",
            "uncommonTLD@domain.museum",
            "uncommonTLD@domain.travel",
            "uncommonTLD@domain.mobi",
            "countryCodeTLD@domain.uk",
            "countryCodeTLD@domain.rw",
            "lettersInDomain@911.com",
            "underscore_inLocal@domain.net",
            "IPInsteadOfDomain@127.0.0.1",
            "IPAndPort@127.0.0.1:25",
            "subdomain@sub.domain.com",
            "local@dash-inDomain.com",
            "dot.inLocal@foo.com",
            "a@singleLetterLocal.org",
            "singleLetterDomain@x.org",
            "&*=?^+{}'~@validCharsInLocal.net",
            "missingDomain@.com",
            "@missingLocal.org",
            "missingatSign.net"
        })
        {
            string s = @"^[-_a-z0-9\'+*$^&%=~!?{}]+(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d+)?$";
            bool isMatch = Regex.IsMatch(email, s, RegexOptions.IgnoreCase);
            Console.WriteLine(isMatch);
        }
    }
}

输出:

True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
False
False
False

问题是它无法匹配某些有效的电子邮件地址,例如 foo\@bar@example.com。匹配太多总比匹配太少好。

关于c# - 电子邮件验证 : converting a regular expression written in PHP (preg) to . NET(正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2035783/

相关文章:

c# - 不同线程访问 MemoryStream

javascript - Angular 请求 api 以及 token

PHP - 在视频上传期间提取帧

c# - 为什么 .Except() 和 Intersect() 不能使用 LINQ 在这里工作?

c# - EF 一对一更新失败

c# - 打开 XML : Delete entire excel column using column index

c# - 在类型初始值设定项内实例化 List

c# - 如何在 XAML WPF 中创建强制依赖属性

c# - 在发布版本中省略代码

php - 如何替换wordpress the_title中的文本?