复杂的正则表达式验证器

时间:2017-02-22 02:42:00

标签: c# regex validation regex-lookarounds

我试图使用正则表达式验证器。诀窍在于它可能需要更多的逻辑,但我希望我能用正则表达式完成这个。因此,如果要测试的字符串以@ faxmail.com结尾,那么它也必须以&​​#34; 1,"开头。否则,基本上没有在@ faxmail.com结束的任何事情都是匹配的。所以,如果我用C#做到这一点,它可能看起来像

if(someString.EndsWith("@faxmail.com"))
{
    if(!someString.StartsWith("1,")) return false;
} else {
    return true;
}

我尝试了类似(?(?=^(\w+)@faxmail.com$)(^1)))的内容,但它部分有效。最后我需要这样的东西:

1,test@faxmail.com (passes)
fail@faxmail.com (fails)
test@testmail.com (passes)

我试图通过正则表达式实现的目标是什么?或者我只是需要使用C#逻辑?

1 个答案:

答案 0 :(得分:2)

你可以试试这个Regex:

    Regex regex = new Regex(@"^1.*(@faxmail.com)$|.*(?<!@faxmail.com)$");

这里有两个正则表达式匹配:

  1. 以1开头,后跟任何字符,以“@ faxmail.com”或
  2. 结尾
  3. 任何不以“@ faxmail.com”结尾的字符串
  4. 您可以使用以下测试用例来验证:

    Regex regex = new Regex(@"^1.*(@faxmail.com)$|.*(?<!@faxmail.com)$");
    Console.WriteLine(regex.IsMatch("1,test@faxmail.com")); //True
    Console.WriteLine(regex.IsMatch("fail@faxmail.com")); //False
    Console.WriteLine(regex.IsMatch("test@testmail.com")); //True
    Console.WriteLine(regex.IsMatch("faxmail@faxmail.com@testmail.com")); //True
    Console.WriteLine(regex.IsMatch("2,test@faxmail.com")); //False