正则表达式为四位数字ASP.Net

时间:2012-10-31 18:49:24

标签: asp.net regex

我一直在高低搜索正则表达式,以便在ASP.Net的文本框中使用以验证四位数字。

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

有人可以帮忙吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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并检查它,那就这样做。

答案 2 :(得分:1)

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

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

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

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