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

问题描述 投票:0回答:1

我需要验证我的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

上面的要求应该发生。有什么可能的方法来检查逗号分隔的字符串中的重复项?如果'Duplicates code'由重复项组成,我需要显示CommaSeparatedString错误消息。我该怎么办?

c# asp.net regex regex-negation
1个回答
0
投票
我不是正则表达式魔术师,但一起困惑的事情可能对您有用here

^((([A-Z]+\d*)(?!.*,\3\b)),)*[A-Z]+\d*$

因此可视化:

“正则表达式可视化”

逐步:

    [^(((-起始字符串ancor,后跟三个捕获组]
  • [[A-Z]+\d*-第三个捕获组必须以大写字母开头(至少一个),后面跟尽可能多的数字]
  • (?!.*,\3\b)-负向查找,以确保先前找到的模式将
  • not在行的后面重复。
  • [),)*-关闭组2,后跟逗号,然后关闭组1,然后必须尽可能多地发生*]
  • [A-Z]+\d*-最后一位是重复我们在第3组中寻找的相同模式
  • [$-结束字符串ancor
  • 我也不擅长解释任何一种,但我希望它足够清楚并且可以工作(由于我没有经验,所以在c#中允许使用反向引用=)]
  • © www.soinside.com 2019 - 2024. All rights reserved.