正则表达式中的0.01到99.99

时间:2010-09-16 13:18:46

标签: php regex

我正在尝试使用允许数字从0.01到99.99,但不允许0.0或任何空值(00.00或00.0或0.00或0.0)或负值的正则表达式。 我来得非常接近,但像往常一样,事情是不对的。 0.0显示为有效。你能帮我解决这个问题。 另外,你不需要保留我已经完成的表达式:)

<?php
if (preg_match('/^[0-9]{1,2}[\.][0-9]{1,2}$/','0.0'))
{echo "Valid";}else{echo "Invalid";}
?>

6 个答案:

答案 0 :(得分:4)

为什么不

<?php
$value = '0.0';
if ($value > 0 && preg_match('/^[0-9]{1,2}[\.][0-9]{1,2}$/', $value)) {
   echo "Valid";
} else {
   echo "Invalid";
}

有时正则表达式不是解决方案,而是问题; - )。

答案 1 :(得分:3)

您确定需要在正则表达式中执行此操作吗?

如果您正在使用正则表达式,因为您正在尝试计算字符串,则可以始终将其转换为双精度数据,然后进行简单的数字比较。

<?php 
function test_number($number)
{
    $number = (double) $number;

    if ($number >= 0.01 && $number <= 99.99) {
        return true;
    } else {
        return false;
    }
}

答案 2 :(得分:2)

试试这个正则表达式:

/^(?:0\.(?:0[1-9]|[1-9]\d)|[1-9]\d?\.\d\d)$/

答案 3 :(得分:2)

这是我的尝试:

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

首先,使用积极的预测((?=.*[1-9]))以确保整个混乱中至少有一个“有效数字”,对于所有形式的0.0,{{{ 1}}或其他什么。下一部分00.00允许小数点前的0,1或2位数,然后是包含文字小数,后跟0,1或2位数的可选组\d{0,2}(?:)? 。使用\.\d{0,2}^只需匹配字符串的开头到结尾即可完成此表达式。

一些快速测试字符串:

0.0 failed.
0 failed.
12 matched.
123 failed.
05.00 matched.
0.01 matched.

答案 4 :(得分:0)

我认为你只考虑1或2位数后跟一个点后跟2位小数

两种解决方案:

1)执行DFA而不是将其转换为正则表达式

   0\.0[1-9] | 0\.[1-9][0-9] | [1-9][0-9]?\.[0-9][0-9]

OR

2)接受任何1-2位数,2位小数:

[0-9][0-9]?\.[0-9][0-9]

然后测试:

 0 < num && num < 100

: - )

答案 5 :(得分:0)

一个简单的解决方案:

<?php

     function test($n) { 
               return($n > 0.0 and $n < 99.99);
        }

        echo test(85); //output 1(true) 
?>