正则表达式验证数字0-100最多两位小数

atr*_*nce 1 php regex preg-match

所以我知道使用php is_numeric函数会更容易,但我要做的是创建一个正则表达式,主要用于学习正则表达式,以测试测试分数.范围可以是0-100,但可以有2个小数位.这就是我到目前为止所做的工作.

  if (preg_match("^([0-9]){2,3})(.[0-9]{2})?$([0-9]{1})?$", $quiz1))
    {
        echo "match";
    }
    else {
        $error = true;
    }
Run Code Online (Sandbox Code Playgroud)

如果我正确地思考字面含义:

字符串的开头找到字符0-9,两个地方.可选的字符串十进制结束,并找到字符0-9,两个地方.可选的字符串结尾查找字符0-9,表示1个位置.

gpo*_*ojd 6

为什么不这样的?

 /^(?:100|\d{1,2})(?:\.\d{1,2})?$/
Run Code Online (Sandbox Code Playgroud)
  • ^ - 字符串的开头
  • (?:100 |\d {1,2}) - 非捕获组,100或0-99
  • (?:\.d {1,2})? - 可选的非捕获组(.#或.##)
  • $ - 结束字符串

结果:

php> $ tests = array(0,5,10,50,100,99.5,75.43,75.436,101);

php> foreach($ tests as $ test){print $ test." - ".preg_match("/ ^(?:100 |\d {1,2})(?:\.\ d {1,2})?$ /",$ test)."\n" 个; }

0 - 1

5 - 1

10 - 1

50 - 1

100 - 1

99.5 - 1

75.43 - 1

75.436 - 0

101 - 0

75F43 - 0

即使我添加斜杠并删除额外的东西,你的工作也不起作用).

php> foreach($ tests as $ test){print $ test." - ".preg_match("/ ^([0-9] {2,3})(.[0-9] {2})?$([0-9] {1})?$ /",$ test)."\n" 个; 0 - 0

5 - 0

10 - 1

50 - 1

100 - 1

99.5 - 0

75.43 - 1

75.436 - 0

101-1

75F43 - 1

  • 你的也会匹配'00`和'100.99`. (2认同)