如何使用正则表达式验证范围 1-99?
Posted
技术标签:
【中文标题】如何使用正则表达式验证范围 1-99?【英文标题】:How can I validate the range 1-99 using a regex? 【发布时间】:2011-04-30 02:30:31 【问题描述】:我需要验证一些用户输入,以确保输入的数字在 1-99 的范围内。这些必须是整数(整数)值
前面的 0 是允许的,但可选
有效值
-
1
01
10
99
09
无效值
-
0
007
100
10.5
010
到目前为止,我已经制定了以下正则表达式:^0?([1-9][0-9])$
这允许在开头使用可选的 0,但不是 100% 正确,因为 1
不被视为有效
有什么改进/建议吗?
【问题讨论】:
您的正则表达式也会认为 110 是一个有效值。 编号?? 0 是否允许?你不能允许 01。整数不能从零开始。 为什么 01 有效而 007 或 010 无效?要么接受前导零,要么不接受。 【参考方案1】:给你:
^(\d?[1-9]|[1-9]0)$
意味着您允许其中任何一个
-
1 到 9 或 01 到 09、11 到 19、21 到 29、...、91 到 99
10, 20, ..., 90
【讨论】:
看起来没有其他人会倒退:) 只是为了加上我的两分钱,我们最初有一个基于 1-9 的模式匹配:现有模式是\\d?[1-9]|[1-9]0 -
这在 chrome 中运行良好,但在 IE 上运行良好。这个当前的建议^(\\d?[1-9]|[1-9]0)\$
似乎在 IT 和 chrome 上都可以使用,请竖起大拇指回答【参考方案2】:
在我的脑海中(未验证)
^(0?[1-9]|[1-9][0-9])$
【讨论】:
我认为应该是:^(0?[1-9]|[1-9][0-9])$
。否则,^ 只绑定到第一个选项,$ 绑定到第二个选项。再说一次,我并不特别了解 Java 正则表达式。
因此是“未验证”。我不记得具体的那种事情了。
注意:如果使用 Matcher.matches()
方法,则不需要 ^ 和 $,因为它会尝试匹配整个字符串...【参考方案3】:
^(([0-9][1-9])|([1-9][0-9])|[1-9])$
应该有效
【讨论】:
【参考方案4】:String d = "11"
if (d.length() <= 2 && d.length() >=1)
try
Integer i = Integer.valueOf(d);
return i <= 99 && i >= 0
catch (NumberFormatException e)
return false;
【讨论】:
我在描述中没有发现它作为要求,尽管现在我在标题中看到了它。脱离正则表达式并拥有相同的东西似乎很有趣。 你的测试还是不正确的;零不应该验证。【参考方案5】:^[0-9]1,2$
应该也可以(它也会匹配 00,希望它是有效匹配)。
【讨论】:
00
不在要求的 1-99 范围内...它也将匹配被列为无效的0
。【参考方案6】:
为什么需要正则表达式?它不适用于数值范围计算。
Apache commons 有 IntegerValidator 具有以下功能:
isInRange(value, 1, 99)
此外,如果您使用的是 Spring、Struts、Wicket、Hibernate 等,您已经可以访问范围验证器。不要用正则表达式重新发明***。
【讨论】:
【参考方案7】:我觉得应该是……
^(0[1-9]|[1-9][0-9])$
【讨论】:
前导零应该是可选的。 我知道这个问题应该是可选的,但这解决了我自己的问题,即小于 10 的数字前导 0 是强制性的。【参考方案8】:这个对我有用:
([1-9][0-9])|(0?[1-9])
它检查 10-99 或 1-9 => 1-99 允许一个前导零
【讨论】:
【参考方案9】:只要做:
^([0]?[1-9]1,2)$
范围将从0
设置为9
,1,2
表示最小位数 = 1,最大位数 = 2。
它将接受,例如:0, 00, 01, 11, 45, 99,
等...
它不会接受,例如:000, 1.2, 5,4, 3490,
等...
【讨论】:
这不能正确回答问题。您的正则表达式匹配 OP 的无效值之一:0
没错!谢谢你看到我的回答。我已经进行了更正,现在可以(编辑)。
现在它匹配010
。它不应匹配超过两位数。 (问题文本在这一点上是模棱两可的,但例子不是。)【参考方案10】:
这是最简单的,我能想到的:
^([1-9][0-9]?)$
只允许 1-99(包括 1-99)。
【讨论】:
对于小于 10 的数字,这不允许前导零。 @AlanMoore 问题说 允许使用前面的 0,但可选 事实上,您的正则表达式将匹配一个包含前导零的数字。但是如果你添加锚点(或使用matches()
方法),它不会。并且必须锚定正则表达式,因为我们正在尝试验证字符串。
@AlanMoore 感谢您的有效解释。我接受必须锚定正则表达式。您的第一条评论具有误导性和仓促。
对不起,我的意思是,除了现在匹配的内容之外,正则表达式还应该匹配 01
、02
、03
等。【参考方案11】:
很晚了,但这会奏效。
^[1-9][0-9]?$
【讨论】:
以上是关于如何使用正则表达式验证范围 1-99?的主要内容,如果未能解决你的问题,请参考以下文章