首页 > 解决方案 > Asp.net DataAnnotations Regex 根据之前的 Char 评估 Char

问题描述

我正在尝试编写一个捕获一年和一周的正则表达式。对于 ASP.net ViewModel。

这是我现在使用的表达式。

 [RegularExpression(@"[\d]{4}-[0-5]\d", ErrorMessage = "Work Week Requires 4 digit year - 2 Week.  e.g. 2019-09")] 

这完成了我想要它做的大部分事情,但有一些情况它没有处理。

这是我试图捕获/拒绝的内容

2001-01  good
2001-10  good
2001-01  good
2001-10  good
2010-1   good
6502-9   good
4657-09  good
2003-01  good
2056-53  good
2056-54  bad
2068-60  bad 
5416-00  bad 
2015-0   bad

10000-15 would be nice to catch but I'm Ok with this code breaking 8000 years from now 

我用这个问题创建了一个 regex101 https://regex101.com/r/iL5rpY/2

问题

我之前不知道如何根据 Char 评估 Char 。

问题

如何创建一个正则表达式来捕获整数 1 到 53 的所有文本版本?

标签: regexasp.net-mvc

解决方案


您可以使用

^0*\d{4,5}-0*(?:[1-9]|[1-4]\d|5[0-3])$

请参阅正则表达式演示

细节

  • ^ - 字符串的开始
  • 0*- 零个或0多个
  • \d{4,5}- 4 或 5 位数字
  • -- 一个连字符
  • 0*- zer 或更多0s
  • (?:[1-9]|[1-4]\d|5[0-3])- 从 to 的数字19或从1to的数字4,然后是任何数字,或5后跟0, 1,23
  • $- 字符串结束。

推荐阅读