我需要一个正则表达式(Javascript),它允许 1 - 2048(不能为 0)之间的任何正数。但是它也应该允许一个负数:-1。
经过一些试验和错误,我想出了这个: ^(-[1]|[1-9]+)$
这允许负 1 和任何数字。但是作为正则表达式的新手,我对如何将数字范围限制为 2048 感到困惑?
最后,我知道并不总是推荐使用正则表达式。但是在这种情况下有几个条件(只有一个范围内的数字,没有特殊字符或空格,并且允许 -1),if 语句是否更可取?
您可以使用以下正则表达式:
^(?:\-1|[1-9]\d{0,2}|1\d{3}|20[0-3]\d|204[0-8])$
尽管使用不使用正则表达式或使用简单正则表达式进行部分验证的语言工具可能更容易。
Javascript 的正则表达式引擎执行以下操作:
^ # match beginning of string
(?: # begin a non-capture group
\-1 # match '-1'
| # or
[1-9]\d{0,2} # match 1-999
| # or
1\d{3} # match 1000-1999
| # or
20[0-3]\d # match 2000-2039
| # or
204[0-8] # match 2040-2048
) # end non-capture group
$ # match end of string
然而,使用其他语言工具来确定字符串是否是整数的表示更容易。这分三步完成:
例如,在 Ruby 中,这可以通过以下代码片段来完成。
return false unless str.match?(/\A\-?\d+\z/)
x = Integer(str)
x == -1 || (1..2048).cover?(x)
作为奖励,剩下一个整数等价物。使用单个正则表达式时,如果需要整数,则需要额外的步骤。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句