我刚刚继承了一个经过大量客户端验证的项目。
正如预期的那样,我发现了一个正则表达式检查器,但没有看到评论。我承认正则表达式绝对是我的失败点之一。 (在 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 不匹配,最好的方法是什么?
正则表达式大师的任何建议将不胜感激。
最佳答案
应以 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
或
([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
或
([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
一个简化的回复:
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
。 ^
和 $
是 anchor ,使它从头到尾匹配。如果省略这些,此 RE 将匹配任何包含 MM/YYYY 的文本。
关于javascript - 这次正则表达式如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3741012/