正则表达式验证从-10到10的数字范围,步长为.5

时间:2014-07-14 10:37:26

标签: php regex

我遇到了 regex ,它可以通过步骤 0.5 验证从 -10 10 的数字。我想出了验证所有负十进制数和正十进制数的正则表达式

/^\-?[1-9]\d{0,2}(\.\d*)?$/

但它与预期结果有点远,应该是:

10.5   // Invalid (Should NOT pass)
10     // Pass
9.5    // Pass
9.4    // Invalid (Should NOT pass)
9      // Pass
1      // Pass
0      // Invalid (Should NOT pass)
-1     // Pass
-5.5   // Pass
-5.3   // Invalid (Should NOT pass)
-9     // Pass
-10    // Pass
-10.5  // Invalid (Should NOT pass)

Example online

有人可以帮忙解决这个问题吗?

3 个答案:

答案 0 :(得分:6)

您可以使用:

^-?(?:[1-9](?:\.5)?|10)$

<强>解释

  • ^锚点断言我们位于字符串的开头
  • -?使用减号可选
  • 非捕获组(?:[1-9](?:\.5)?|10)匹配...
  • [1-9](?:\.5)?从1到9的一位数字和一个可选的.5
  • | 10
  • $锚点断言我们位于字符串的末尾

答案 1 :(得分:1)

尝试使用简单的代码段

^-?(?:10|[1-9](?:\.[05])?)$

Regular expression visualization

Debuggex Demo

以下是所有数字的示例:http://regex101.com/r/aE8iH9/3

嗯......更新后,它看起来非常类似于zx81

的答案

答案 2 :(得分:1)

您可以使用以下正则表达式将-1010的数字范围与步骤0.5相匹配。

^-?(?:10|[1-9](?:\.5)|[1-9])$

DEMO