如何使用正则表达式验证范围 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 设置为91,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 感谢您的有效解释。我接受必须锚定正则表达式。您的第一条评论具有误导性和仓促。 对不起,我的意思是,除了现在匹配的内容之外,正则表达式还应该匹配 010203 等。【参考方案11】:

很晚了,但这会奏效。

^[1-9][0-9]?$

【讨论】:

以上是关于如何使用正则表达式验证范围 1-99?的主要内容,如果未能解决你的问题,请参考以下文章

版本号的正则表达式

使用正则表达式验证掩码和货币的限制范围

用于验证 int 范围字符串的正则表达式

js 用正则表达式验证只允许输入数字,或者是数字后两位小数点,如何写?

form表单验证和事件正则表达式

form表单验证和事件正则表达式