繁体   English   中英

这段时间正则表达式如何工作?

[英]How does this time Regex Work?

我刚刚继承了一个带有许多客户端验证的项目。

在这里,我找到了一个正则表达式检查器,正如预期的那样,没有任何评论。 我承认正则表达式绝对是我的失败之处之一。 (使用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

简化的RE:

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 ^$是锚点,导致其从开始到结束都匹配。 忽略这些内容时,此RE将匹配任何包含MM / YYYY的文本。

我同意-它以MM / yyyy格式检查日期。

它允许每月任意数量的前导零。 它允许年份匹配19 xx或其他任何以2929之间的数字开头的数字。 这表示该年份最多可允许9999 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM