我刚刚继承了很多客户端验证的预测。
在这里我发现了一个正则表达式检查器,正如预期的那样没有评论。我承认正则表达式绝对是我失败的一点。 (在Javascript中!)
var myRegxp = /(([0]*[1-9]{1})|([1]{1}[0-2]{1}))(\/{1})((19[0-9]{2})|([2-9]{1}[0-9]{3}))$/;
if (!myRegxp.test(args.Value))
{//do fail stuff here};
我非常确定页面的其余部分应该检查某种日期格式。这会通过MM / YYYY。从一些早期的测试中,几乎就可以了。
如果此正则表达式与MM / YYYY不匹配,那么最好的方法是什么?
任何来自正则表达大师的建议都将受到赞赏。
答案 0 :(得分:4)
以MM / YYYY结尾(MM为1-12,YYYY为1900-9999)
(匹配月份)
([0]*[1-9]{1})
zero or more occurences of '0', and one occurence of 1-9
Example match: 01
OR
([1]{1}[0-2]{1})
1 match of '1', 1 match of 0-2
Example match: 10
第二部分(年),首先它与'/'字面匹配:
(\/{1})
那一年:
((19[0-9]{2})
One match of '/', 19 and two matches of 0-9 (looks like a year in the range 1900-1999)
Example match: 1900
OR
([2-9]{1}[0-9]{3})
1 match of 2-9 and thee matches of 0-9 (looks like a year in the range 2000-9999
Example match: 2000
简化的RE:
var myRegExp = /^(0[1-9]|1[0-2])\/(19\d{2}|[2-9]\d{3})$/;
注意:\d
是0-9
的字符类。我删除了用于分组的括号,因为myRegExp.test
中没有使用这些括号。 替换将[0]*
0?
,因为它不应与0000001/2010
匹配,但它应与1/2010
匹配。[0]*
替换为0
因为它应该字面上匹配01
而不是1
。 ^
和$
是锚点,导致它从头到尾匹配。当它们离开时,这个RE将匹配任何包含MM / YYYY的文本。
答案 1 :(得分:1)
我同意 - 它是以 MM / yyyy 格式检查日期。
它允许月内任意数量的前导零。它允许年份匹配19 xx
或以2
和9
之间的数字开头的任何其他内容。这意味着它允许一年中最多9999的任何东西:)