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* - 零个或多个 0s \d4,5 - 4 位或 5 位数字 - - 一个连字符 0* - 或更多 0s (?:[1-9]|[1-4]\d|5[0-3]) - 从19 的数字,或从14 的数字,然后是任何数字或5,后跟012 或@ 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 属性

.NET 4.0 DataAnnotations GAC/EntityFramework 冲突

ASP.Net MVC开发基础学习笔记:四校验AJAX与过滤器