Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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# 如何使用正则表达式验证逗号分隔的字符串_C#_Asp.net_Regex - Fatal编程技术网

C# 如何使用正则表达式验证逗号分隔的字符串

C# 如何使用正则表达式验证逗号分隔的字符串,c#,asp.net,regex,C#,Asp.net,Regex,我需要验证我的c#模型类 [Required(ErrorMessage = "Comma Separated String Required")] [RegularExpression(@"", ErrorMessage = "Invalid Comma Separated String.")] [RegularExpression(@"", ErrorMessage = "Duplicate Code.")] public string CommaSeparatedString { get;

我需要验证我的c#模型类

[Required(ErrorMessage = "Comma Separated String Required")]
[RegularExpression(@"", ErrorMessage = "Invalid Comma Separated String.")]
[RegularExpression(@"", ErrorMessage = "Duplicate Code.")]
public string CommaSeparatedString { get; set; }
我刚刚尝试了下面的正则表达式,但它对我不起作用

((\s+)??(\d[a-z]|[a-z]\d|[a-z]),?)+?$
在我的例子中,
CommaSeparatedString
可以是:

ASAEW1,ASAEW2,ASA,S4,ASAEW5,ASAEW6,ASAEW7 - Valid

ASAEW1,ASAEW2,ASA,S4,ASAEW5,ASAEW6,ASAEW7,ASAEW6 - Invalid - Duplicate ASAEW6

ASAEW1,ASAEW2,ASA,S4,ASAEW5,ASAEW6,ASAEW7, - Invalid - Comma at end

ASAEW1,ASAEW2,,ASA,S4,ASAEW5,ASAEW6,ASAEW7 - Invalid - No value between 2,3 comma

应满足上述要求。是否有任何可能的方法来检查逗号分隔字符串中的重复项?如果
CommaSeparatedString
包含重复项,我需要显示
'Duplicates code'
错误消息。我怎么能做到这一点呢?

我不是一个正则表达式魔术师,但我对一些可能对你有用的东西感到困惑:

因此,要将其形象化:

分步骤:

  • ^((
    -开始字符串ancor后跟三个捕获组
  • [A-Z]+\d*
    -第三个捕获组必须存在于大写字母(至少一个)之外,后面跟尽可能多的数字
  • (?!.*,\3\b)
    -负向前看,以确保先前找到的模式将具有进一步向下的重复模式
  • ),)*
    -结束组2后接逗号,结束组1必须尽可能多地出现
    *
  • [A-Z]+\d*
    -最后一位重复了我们在第3组中寻找的相同模式
  • $
    -结束字符串ancor

我也不是最擅长解释,但我希望它足够清晰且有效(希望在c中允许反向引用,因为我在这方面没有经验)=

您可以使用或Nuget包查看模型的自定义验证

对于一个仅依赖于框架的解决方案,我编写了一个可能适合您的示例,或者至少可以让您开始:

公共类MyModel:IValidatableObject
{
公共字符串CommaSeparatedString{get;set;}
公共IEnumerable验证(ValidationContext ValidationContext)
{
if(逗号分隔字符串.EndsWith(“,”))
{
返回新的ValidationResult(“无效的逗号分隔字符串-结尾的逗号”);
}
var splitCodes=CommaSeparatedString.Split(“,”);
var setOfCodes=new HashSet();
foreach(splitCodes中的var代码)
{
if(code.Trim()==String.Empty)
{
返回新的ValidationResult(“无效的逗号分隔字符串-缺少代码”);
持续
}
var Add=集合代码。Add(代码);
如果(!added)返回新的ValidationResult($“重复代码:{Code}”);
}
}
}

这不是一个完整的答案,但我认为FluentValidation库将在这里发挥奇效,您可以在这里编写自定义验证规则。仅使用正则表达式,您不会走得太远,但我认为您需要编写一些代码来拆分参数并检查它们的存在性,如果存在任何重复项,我如何为
无效的逗号分隔字符串返回单独的模型验证。
需要逗号分隔字符串
?谢谢你的回答sir@Adam,我将无法在
c#
方面帮助您,因为上述模式应该适用于您提出的所有4个案例。对不起,如果没有帮助的话。谢谢你,先生。先生,您能给我提供另一个正则表达式来检查2结尾的1.逗号吗。开头用逗号,3。逗号之间没有值。因为我计划在没有正则表达式的情况下检查重复部分。请帮助我,先生,我如何编写正则表达式来只检查这三个验证。1.结尾处的逗号2。开头用逗号,3。commasI之间没有价值我没有使用.net core。无论如何,谢谢。我怎样才能写一个正则表达式来只检查这三个验证?1.结尾处的逗号2。开头用逗号,3。逗号之间没有值为什么决定用正则表达式处理这个问题?在另一个答案中,我们为您提供了一个使用regex的解决方案,但是您需要分离错误。顺便说一下,同样的代码在.NET 4 .x上运行,这就是为什么我在括号中添加了核心的原因,因为我不确定你使用的是哪一个框架。只是一些提示:首先,如果这是一个新的应用程序,考虑迁移到.NETCARE的可能性。第二,关于正则表达式:在正则表达式中进行验证将是调试和更改的一大难题,最好是更加明确,并在代码中包含逻辑。有一句名言:有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题。
^((([A-Z]+\d*)(?!.*,\3\b)),)*[A-Z]+\d*$