c# - 复杂的正则表达式验证器

标签 c# regex validation regex-lookarounds

我正在尝试使用正则表达式验证器。诀窍是它可能需要更多的逻辑,但我希望我可以只用正则表达式来完成这个。因此,如果要测试的字符串以@faxmail.com 结尾,那么它也必须以“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# 逻辑?

最佳答案

你可以试试这个正则表达式:

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

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

  1. 以 1 开头,后跟任意字符,以“@faxmail.com”结尾,或者
  2. 任何不以“@faxmail.com”结尾的字符串

您可以使用下面的测试用例来验证:

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

关于c# - 复杂的正则表达式验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381735/

相关文章:

c# - 从技术上讲, "roaming"是什么意思?

c# - 如何使用 '&' 在枚举中创建值

mysql - 在MySQL查询中获取子字符串

javascript - 使用嵌套对象验证 Backbone 模型

c++ - 陷入函数内的循环 (C++)

java - GUI 的输入验证

c# - 在 SharpSvn 中,SvnClient.getinfo 的返回值是什么?

c# - 从 Azure Blob 存储读取文本文件值

c# - 将字符串转换为日期

java - 如何按空格拆分字符串但转义引号内的空格(在 java 中)?