0

我一直在寻找用于在 ASP.Net 中的文本框上使用的正则表达式来验证四位数字。

四位数字一分为二,第一位数字需要为 0 - 9,数字的最后一部分可以是 001 到 365。因此,您可以是 1001 或 0365,这将是有效数字。基本上,它是日期代码,数字的第一部分或第一个数字是年份,最后一部分是日/月,所以 001 是 1 月 1 日或 365 是 12 月 31 日。

任何人都可以帮忙吗?

4

3 回答 3

3

使用正则表达式验证数字范围有点棘手但可能:

^[0-9](00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-5])$

我建议你这样做,是这样的:

^[0-9]([0-9]{3})$

然后您获取第一个捕获的匹配项(仅包含最后三位数字)并检查它是否大于0和小于366

Match m = Regex.Match(input, @"^\d(\d{3})$");
int day = int.Parse(m.Groups[1].Value);
if(day > 0 && day < 366)
   // valid
else
   // invalid
于 2012-10-31T18:53:47.413 回答
2

我同意@greg,这不是正则表达式的适当用途。但是由于位数是固定的,所以真的不难做到:

^\d([12]\d\d|3[0-5]\d|36[0-5]|0\d[1-9]|0[1-9]\d)$

无需转换为 int 进行验证。

翻译:第一个数字可以是任何东西;它后面必须跟任何 3 位数字: 以 1 或 2 开头;或以 3[0-5] 开头;或以 36 开头,最多为 365;或以 0 开头并且有一个非零数字(感谢@m.buettner!)

注:在上面,\d表示“数字”。在 .NET 上,您可以替换[0-9]每个\d.

奖励:要允许闰年有 366 天,只需将上述值翻倍并将其设置为第一位。如果 2 表示 2012 年,0 表示 2020 年,闰年数字为 2,6,0,您有:

^([1345789]([12]\d\d|3[0-5]\d|36[0-5]|0\d[1-9]|0[1-9]\d)|[260]([12]\d\d|3[0-5]\d|36[0-6]|0\d[1-9]|0[1-9]\d))$

是的,已经失控了。如果您可以转换为 int 并进行检查,请执行此操作。

于 2012-10-31T18:56:11.753 回答
1

我同意格雷格的观点。您可以验证该条目是否为数字并且基本上符合您的规范,但您仍需要在验证格式后以编程方式进行检查。

一个正则表达式是 /^[0-9]{1}[0-3]{1}[0-9]{2}$/

然后你必须分开最后三位数字并进行验证。

www.regextester.com 非常适合快速尝试表达式。www.regexlib.com 是一个很好的存储库,包含大量用户提交的正则表达式字符串。

于 2012-10-31T18:58:13.067 回答