我一直在高低搜索正则表达式,以便在ASP.Net的文本框中使用以验证四位数字。
四位数字被分成两个,第一个数字需要是0到9,最后一个数字可以是001到365.所以,你可以1001或0365,这将是有效数字。基本上,它是日期的代码,数字或第一个数字的第一部分是年份,最后一部分是日期/月份,因此001是1月1日或365是12月31日。
有人可以帮忙吗?
答案 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是许多用户提交的正则表达式字符串的良好存储库。