我需要验证一些用户输入,以确保输入的数字在1-99(含)的范围内。这些必须是整数值。
可以使用前导0,但是可选的。
有效的值
- 1
- 01
- 10
- 99
- 09
无效的值
- 0
- 007
- 100
- 10.5
- 010
到目前为止,我已经有了以下正则表达式:^0?([1-9][0-9])$
这允许在开头使用可选的0,但不是100%正确的,因为1
被视为无效的。有改进/建议吗?
我需要验证一些用户输入,以确保输入的数字在1-99(含)的范围内。这些必须是整数值。
可以使用前导0,但是可选的。
有效的值
无效的值
到目前为止,我已经有了以下正则表达式:^0?([1-9][0-9])$
这允许在开头使用可选的0,但不是100%正确的,因为1
被视为无效的。有改进/建议吗?
仅凭直觉(未验证)
^(0?[1-9]|[1-9][0-9])$
^(0?[1-9]|[1-9][0-9])$
。否则,^仅绑定到第一个选择,$绑定到第二个选择。但是,我不特别了解Java正则表达式。 - JanderMatcher.matches()
方法匹配整个字符串,则不需要使用^和$。此内容与编程有关。 - user85421这里是你需要的答案:
^(\d?[1-9]|[1-9]0)$
这意味着您可以允许以下任一选项:
\\d?[1-9]|[1-9]0
- 这在Chrome上运行良好,但在IE上不行。这个当前的建议 ^(\\d?[1-9]|[1-9]0)\$
看起来在IT和Chrome上都能工作,已经得到了回答的认可。 - V H^(([0-9][1-9])|([1-9][0-9])|[1-9])$
应该可以工作
为什么需要正则表达式?它不适用于数字范围计算。
Apache Commons提供了IntegerValidator,其中包括以下内容:
isInRange(value, 1, 99)
虽然有点晚,但这个方法还是可以的。
^[1-9][0-9]?$
我认为应该是这样的...
^(0[1-9]|[1-9][0-9])$
这个对我自己有效:
([1-9][0-9])|(0?[1-9])
它检查10-99或1-9 => 1-99,允许一个前导零
^([1-9][0-9]?)$
只允许输入1-99之间的数字,包括1和99。matches()
方法),它将不会匹配。而且,由于我们正在尝试验证字符串,所以正则表达式必须被锚定。 - Alan Moore01
、02
、03
等,除了它现在已经匹配的内容。 - Alan Moore只需这样做:
^([0]?[1-9]{1,2})$
范围将从0
到9
设置,{1,2}
表示最小数字= 1,最大数字= 2。
例如,它将接受:0、00、01、11、45、99
等...
例如,它将不接受:000、1.2、5,4、3490
等...
0
。 - Slyvain010
。它不应该匹配超过两个数字。(问题文本在这一点上存在歧义,但示例没有。) - Alan Moore^[0-9]{1,2}$
也应该能工作(它也会匹配00,希望这是一个有效的匹配)。