Ran*_*ray 76 regex string validation string-matching
给定一个值我想验证它是否有效年份.我的标准很简单,其值应为带4字符的整数.我知道这不是最好的解决方案,因为它不会允许多年,1000并且会允许多年如此5000.这个标准适合我目前的情况.
我想出的是
\d{4}$
虽然这有效但它也允许负值.
如何确保只允许正整数?
r92*_*r92 161
年份从1000到2999
^[12][0-9]{3}$
Run Code Online (Sandbox Code Playgroud)
1900年至2099年
^(19|20)\d{2}$
Run Code Online (Sandbox Code Playgroud)
cod*_*ict 72
您需要添加一个起始锚点^:
^\d{4}$
Run Code Online (Sandbox Code Playgroud)
您的正则表达式\d{4}$将匹配以4位数结尾的字符串.所以输入-1234就会被接受.
通过添加起始锚,您只匹配以4位开头和结尾的字符串,这实际上意味着它们必须只包含4位数.
sfe*_*rik 21
这个问题的"接受"答案既错误又近视.
这是不正确的,它将匹配字符串0001,这不是一个有效的年份.
它是近视的,它不会匹配9999以上的任何值.我们是否已经忘记了Y2K的教训?相反,使用正则表达式:
^[1-9]\d{3,}$
Run Code Online (Sandbox Code Playgroud)
如果您需要匹配过去的年份,除了将来的年份之外,您可以使用此正则表达式来匹配任何正整数:
^[1-9]\d*$
Run Code Online (Sandbox Code Playgroud)
即使你不期望过去的日期,你也可能想要使用这个正则表达式,以防万一有人发明了一台时间机器,并希望带回你的软件.
注意:此正则表达式将匹配所有年份,包括第1年之前的年份,因为它们通常用BC指定而不是负整数表示.当然,这个约定可能会在接下来的几千年内发生变化,因此您最好的选择是将任何整数正数或负数与以下正则表达式匹配:
^-?[1-9]\d*$
Run Code Online (Sandbox Code Playgroud)