四位数ASP.Net的正则表达式

四位数ASP.Net的正则表达式,asp.net,regex,Asp.net,Regex,我一直在到处寻找一个正则表达式,用它在ASP.Net的文本框中验证一个四位数的数字 四位数字分为两位,第一位数字需要是0-9,数字的最后一部分可以是001到365。所以,您可以选择1001或0365,这将是有效的数字。基本上,它是日期的代码,数字的第一部分或第一个数字是年份,最后一部分是日/月,所以001是1月1日,365是12月31日 有人能帮忙吗?用正则表达式验证数字范围有点棘手,但可能: ^[0-9](00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-

我一直在到处寻找一个正则表达式,用它在ASP.Net的文本框中验证一个四位数的数字

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


有人能帮忙吗?

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

^[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
Match m=Regex.Match(输入@“^\d(\d{3})$”;
int day=int.Parse(m.Groups[1].Value);
如果(天>0&&天<366)
//有效的
其他的
//无效的

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

^[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
Match m=Regex.Match(输入@“^\d(\d{3})$”;
int day=int.Parse(m.Groups[1].Value);
如果(天>0&&天<366)
//有效的
其他的
//无效的

我同意@greg的观点,这不适合用于regexp。但由于数字的数量是固定的,所以确实不难做到:

^\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并检查它,那么就这样做。

我同意@greg的观点,这不适合用于regexp。但由于数字的数量是固定的,所以确实不难做到:

^\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并检查它,那么就这样做。

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

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

然后,您必须将最后三位数字分开并进行验证

www.regextester.com很适合快速尝试表达式。
www.regexlib.com是大量用户提交的regex字符串的良好存储库。

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

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

然后,您必须将最后三位数字分开并进行验证

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

数值范围验证不适合用于正则表达式。还有,别忘了闰年。使用正则表达式验证是否有数字输入
[0-9]{4}
,然后编写一些代码来验证输入字段中的数字范围。数字范围验证不适合用于正则表达式。还有,别忘了闰年。使用正则表达式验证是否有数字输入
[0-9]{4}
,然后编写一些代码以验证输入字段中的数字范围。请注意,.NET
\d
中的数字将匹配任何Unicode数字,而不仅仅是
[0-9]
@Oded-但这仍然取决于验证是在客户端还是服务器端运行。@Kobi-这是什么意思。NET正则表达式引擎?我同意JavaScript正则表达式引擎将以不同的方式匹配,如果这是你的意思的话。这就是我的意思。在大多数情况下,它将作为JavaScript正则表达式运行。请注意,在.NET中,
\d
将匹配任何Unicode数字,而不仅仅是
[0-9]
@Oded-但它仍然取决于验证是在客户端还是服务器端运行。@Kobi-这是什么意思。NET正则表达式引擎?我同意JavaScript正则表达式引擎将以不同的方式匹配,如果这是你的意思的话。这就是我的意思。在大多数情况下,它将作为JavaScript正则表达式运行。