javascript - 这次正则表达式如何工作?

标签 javascript regex

我刚刚继承了一个经过大量客户端验证的项目。

正如预期的那样,我发现了一个正则表达式检查器,但没有看到评论。我承认正则表达式绝对是我的失败点之一。 (在 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})$/;

注意:\d0-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/

相关文章:

javascript - 一张 D3 图上有多个文件

Python Regex Sentence Finder-想忽略 "a.m."

ruby - 将正文拆分成句子但保留标点符号?

java - 在检查回文时如何忽略空格、标点符号和所有不同于字母的字符?

javascript - 如何修复: @ in regular expression of perl script interpreted as array

python - 使用正则表达式从 URL 捕获域和路径

javascript - 任何 Jqplot 图表的背景不透明度

javascript - 是否可以在没有浏览器的情况下运行 Karma?

javascript - 为什么 "load"或 "DOMContentLoaded"不阻止在加载页面之前触发提示?

javascript - 删除 if 包含某个字符串 Javascript 不是 jquery