正则expression式匹配来testing一个有效的年份
给定一个值,我想validation它是否是有效的一年。 我的标准很简单,值应该是一个4
字符的整数。 我知道这不是最好的解决scheme,因为它不会允许年前1000
,并将允许如5000
。 这个标准适合我当前的情况。
我想到的是
\d{4}$
虽然这工作,它也允许负值。
我如何确保只允许正整数?
你需要添加一个开始锚点^
为:
^\d{4}$
您的正则expression式\d{4}$
将匹配以4位数字结尾的string。 所以像-1234
这样的input将被接受。
通过添加起始锚点,您只匹配那些以4位开头和结尾的string,这实际上意味着它们只能包含4位数字。
从1000年到2999年
^[12][0-9]{3}$
1900 – 2099年
^(19|20)\d{2}$
这个问题的“接受”答案既不正确也不近视。
这是不正确的,它会匹配像0001
,这不是一个有效的年份string。
这是近视,它不会匹配任何高于9999的值。我们已经忘记了千年虫的教训吗? 相反,使用正则expression式:
^[1-9]\d{3,}$
如果你需要匹配过去几年,除了将来的几年,你可以使用这个正则expression式来匹配任何正整数:
^[1-9]\d*$
即使你不希望从过去的date,你可能会想要使用这个正则expression式,以防万一有人发明了时间机器,并想把你的软件带回去。
注意:这个正则expression式将匹配所有年份,包括那些在第一年之前的年份,因为它们通常用BC指定而不是负整数表示。 当然,这个约定在未来几千年可能会发生变化,所以你最好的select是把任何整数正数或负数与下面的正则expression式匹配:
^-?[1-9]\d*$
这适用于1900年至2099年:
/(?:(?:19|20)[0-9]{2})/
build立在@ r92答案,1970 – 2019年:
(19[789]\d|20[01]\d)
你可以像[ ^-]\d{4}$
:防止减号-
在你的4位之前。
你也可以用^\d{4}$
和^
来捕获string的开头。 这实际上取决于你的情况
你可以把你的整数转换成一个string。 由于减号不符合数字,您将不会有负数年份。
我在Java中使用这个正则expression式^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|[2-9][0-9])[0-9]{2}$
从1900年到9999年工作
/ ^ \ d {4} $ /这将检查一个string是否只包含4个数字。 在这种情况下,要input一年989,您可以改为0989。
要testing一年中包含其他字词的string以及年份,您可以使用以下正则expression式: \ b \ d {4} \ b