Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数字0的Regexp类型_Php_Regex - Fatal编程技术网

Php 数字0的Regexp类型

Php 数字0的Regexp类型,php,regex,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,它返回fal

我希望输入字段中的任何数字都为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

regexp本身已经很好了

你的实际问题是:

 ?true:false
当使用正则表达式成功时,它将返回一个字符串,该字符串仅为
“0”

  • 现在,如果
    ?:
    在布尔上下文中计算,那么最终表达式将是
    false

  • 因此,请使用或将筛选器_var()结果检查包装起来

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

    • 也许可以尝试:

      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
      }
      

      试试这个:
      检查条件==错误
      如下所示:

      $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
      

      由于PHP是一种松散类型的语言(默认情况下,不会对变量的类型进行比较,而只对变量的值进行比较),因此返回字符串
      “0”
      的条件将作为进行计算,从而执行else语句。要检查值是否为空且不是数字,请使用
      empty($num)&&!是数字($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'] ) );
      

      有效电话号码的条件是什么?请尝试使用
      /^[0-9]*$/
      。或者它必须以
      0
      开头?在仅“0”的情况下,它后面是行末吗?因为如果不是,你就错了我已经试过了bro@Stribizev,还是错了请提供可重复的例子,而不仅仅是只有你知道的
      $cond[“pdo”]
      。另外,如果是电话号码,您不需要最严格的regexp。人们通常希望输入类似于
      +1-123-49429
      的内容。
      $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'] ) );