c# - 如何使用正则表达式验证逗号分隔的字符串
问题描述
我需要验证我的 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
我怎样才能做到这一点?
解决方案
我不是正则表达式魔术师,但对可能对您有用的东西感到困惑:
^((([A-Z]+\d*)(?!.*,\3\b)),)*[A-Z]+\d*$
因此,将其可视化:
在步骤:
^(((
- 开始字符串 ancor 后跟三个捕获组[A-Z]+\d*
- 第三个捕获组必须存在大写字母(至少一个),后跟尽可能多的数字(?!.*,\3\b)
- 负前瞻以确保先前找到的模式不会再有重复。),)*
- 结束组 2 后跟逗号和结束组 1,然后必须*
尽可能多次出现[A-Z]+\d*
- 最后一点是重复我们在第 3 组中寻找的相同模式$
- 结束字符串锚
我也不是最擅长解释的,但我希望它足够清楚并且有效(希望在 c# 中允许反向引用,因为我没有这方面的经验)=)
推荐阅读
- python - 使用 Python 3.8.3 在 Windows 上出现 MediaPipe 安装错误的原因可能是什么?
- java - 在 Android 应用程序中将用户覆盖保留为默认日/夜模式的共享偏好
- java - 如何组合 if/else 语句
- javascript - 与 AWS 反应 - 错误:html-webpack-plugin 无法缩小生成的输出
- python - Tkinter“添加新玩家”功能
- java - 杰克逊(2.9.8)@JsonPropertyOrder(和其他人)被忽略
- javascript - 如何使用 React.forwardRef(); 和 JSX 的点表示法
- javascript - JS,如何在循环中获得承诺
- javascript - 图 DFS 方法调用堆栈展开混乱
- docker - 如何使用 SocketXP 转发 Webhooks 建立本地托管的 Docker API 服务器