C# 如何使用正则表达式验证逗号分隔的字符串
我需要验证我的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;
[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必须尽可能多地出现),)*
*
-最后一位重复了我们在第3组中寻找的相同模式[A-Z]+\d*
-结束字符串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*$