数字0

时间:2015-08-13 10:19:17

标签: php regex

我想在输入字段中输入0到9的任何数字,所以我检查filter_var如下

<?php
$res['pno'] = filter_var($cond['pno'],FILTER_VALIDATE_REGEXP,
//check valid phone no
array('options'=>array('regexp'=>'/^0+[0-9]*$/')))?true:false;                
?>

输入任何数字都可以,但只输入0,它会返回 false 所以如果我只输入0,如何检查它以返回 true

4 个答案:

答案 0 :(得分:9)

regexp本身已经很好了。

您的实际问题是:

 ?true:false

当正则表达式的filter_var成功时,它将返回仅"0"字符串

  • 现在,如果?:布尔上下文中对其进行评估,那么您的最终表达式将只是false

  • 请使用strlen()is_string对filter_var()结果进行包装。

     = is_string(filter_var(…, …, …)) ? true : false;
    

    (是的,?true:false 高度是多余的。)

答案 1 :(得分:4)

也许试试:

if ($res['pno']!==false){
    // !== operator is important
    // because it checks value AND type of constant
    // string '0' is equal false if You checks only value
}

答案 2 :(得分:1)

试试这个:检查条件!==false如下:

$cond['pno']="0";
$res['pno'] = filter_var($cond['pno'],FILTER_VALIDATE_REGEXP,
array('options'=>array('regexp'=>'/^0+[0-9]*$/')))!==false?true:false;                
var_dump($res['pno']);
$cond['pno']="01";
$res['pno'] = filter_var($cond['pno'],FILTER_VALIDATE_REGEXP,
array('options'=>array('regexp'=>'/^0+[0-9]*$/')))!==false?true:false;                
var_dump($res['pno']);
$cond['pno']="a";
$res['pno'] = filter_var($cond['pno'],FILTER_VALIDATE_REGEXP,
array('options'=>array('regexp'=>'/^0+[0-9]*$/')))!==false?true:false;                
var_dump($res['pno']);

<强>输出

boolean true

boolean true

boolean false

答案 3 :(得分:1)

因为PHP是一种松散类型的语言(比较不是基于类型,而是仅基于变量的值),返回字符串"0"的条件被评估为empty因此,执行其他声明。要检查值是否为空而不是数字,请使用empty( $num ) && !is_numeric( $num ),例如:

$res['pno'] = filter_var( $cond['pno'], FILTER_VALIDATE_REGEXP, array( 'options' => array( 'regexp'=>'/^0+[0-9]*$/' ) ) );
$res['pno'] = !( empty( $res['pno'] ) && !is_numeric( $res['pno'] ) );