Asp.net DataAnnotations Regex 根据之前的 Char 评估 Char
Posted
技术标签:
【中文标题】Asp.net DataAnnotations Regex 根据之前的 Char 评估 Char【英文标题】:Asp.net DataAnnotations Regex evaluate a Char based on the Char before 【发布时间】:2018-10-28 02:45:13 【问题描述】:我正在尝试编写一个捕获一年和一周的正则表达式。对于 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 的所有文本版本?
【问题讨论】:
你可能想要^\d4-(?:0?[1-9]|[1-4]\d|5[0-3])$
。或^\d4,5-(?:0?[1-9]|[1-4]\d|5[0-3])$
。或者,考虑奖金,试试^\d4,5-0*(?:[1-9]|[1-4]\d|5[0-3])$
。
你可以使用^(?:5[0-3]|[1-4][0-9]|[1-9])$
匹配1-53
@WiktorStribiżew 太快了,我不知道帮助满员的非捕获组
更新了积分链接
啊当然可以,那么它可以是^(?:5[0-3]|[1-4][0-9]|0?[1-9])$
,带有可选的前导零。
【参考方案1】:
你可以使用
^0*\d4,5-0*(?:[1-9]|[1-4]\d|5[0-3])$
请参阅regex demo。
详情
^
- 字符串开头
0*
- 零个或多个 0
s
\d4,5
- 4 位或 5 位数字
-
- 一个连字符
0*
- 或更多 0
s
(?:[1-9]|[1-4]\d|5[0-3])
- 从1
到9
的数字,或从1
到4
的数字,然后是任何数字或5
,后跟0
、1
、2
或@ 987654339@
$
- 字符串结束。
【讨论】:
刚刚在此测试过,现在正在生产中部署。这正是我所需要的。以上是关于Asp.net DataAnnotations Regex 根据之前的 Char 评估 Char的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 DataAnnotations & Regex - c# - ASP.NET Core
如何使用 DataAnnotations 处理 ASP.NET MVC 2 中的布尔值/复选框?
在 ASP.NET WebAPI 中使用 DataAnnotations 验证数据
Asp.Net MVC 中 DataAnnotations StringLength 中文本框的 maxlength 属性