验证等级变量,处理之前

时间:2018-09-08 17:13:29

标签: php regex

我有一个使用Ajax发送到PHP的等级变量,我想验证该变量。

等级从0.55,因此可能的接受值为0.5, 1, 1.5, 2, .. 5

我正在尝试使用Regular Expressions进行检查:

$var = 0.5;
$pattern = '/^[0-9]|[0-9.][0-9]$/';

if( ! preg_match($pattern, $var) ){
        echo 'Doesn't match!';
}else{
    echo 'Matches!';
}

但这会检查任何数字,或者像1, 0.2, 10000, 1000.99这样的十进制。

那么如何将其限制为仅检查0.5, 1, 1.5, .. 5

3 个答案:

答案 0 :(得分:2)

只需查找数字0-4和可选的.55

^(?:[0-4](\.5)?|5)$

演示:https://regex101.com/r/Bcsl6d/1/

...或者如果0无效,请执行与5相同的操作。

^(?:0\.5|[1-4](\.5)?|5)$

说明:

您的正则表达式:

^[0-9]|[0-9.][0-9]$
^[1-9]|[1-9.][1-9]$

只是在寻找一个数字,或者一个数字或.和一个数字。您需要字符类an之外的.是可选的,然后您需要.之后的数字只能是5并且也是可选的。 0-9也太大,您确实想要1-5,但是在该范围之后您不能执行可选的.5,因为它将使5.5有效。

您还可以为此rangein_array使用2个PHP函数。 range的第三个参数是增加值的步骤。

$values = range(.5, 5, .5);
if(in_array('5', $values)) {
    echo 'valid number';
} else{
    echo 'invalid';
}

https://3v4l.org/1LfAT

答案 1 :(得分:1)

您可以使用此正则表达式将.55之间的数字进行匹配,并在结尾加上.0作为可选字符,例如4.04都将被验证:

^(?:[1-4](?:\.[05])?|0?\.5|5(?:\.0)?)$

RegEx Demo

RegERx详细信息:

  • ^:开始
  • (?::启动非捕获组
    • [1-4](?:\.[05])?:将数字1.04.5匹配,并在结尾加上.0可选
    • |:或
    • 0?\.5:匹配0.5.5
    • |:或
    • 5(?:\.0)?:匹配55.0
  • ):结束非捕获组
  • $:结束

答案 2 :(得分:1)

或者因为您只有十个可能的值,所以对于那些以后不得不看一下代码并实际尝试理解它们的人而言:

$valid = ['0.5', '1', '1.5', '2', ...];

if (!in_array($var, $valid)) {
    // invalid value given.
}

无需使用复杂的正则表达式来验证简单的内容。