PHP正则表达不会匹配

时间:2014-10-07 22:24:59

标签: php regex

我是php开发的新手(我自己像我想的那样学习)和正则表达式,我在php文件中有以下功能:

function func($data) {

  $posData = preg_replace( '/([^.0-9]+)/', '', $data); // This should remove everything but periods and numbers.

  if ( preg_match( '/^([01][0-9]|20|[01][0-9][.][0-9]{1,2}|0[.][0-9]{1,2})\z/' , $posData ) ) {
    return $posData;
  }
  else {
    return false;
  }
}

应该匹配,例如:20 | 0.25 | 12 | 08.54 | 15.6,这不应该匹配0,7.12,任何高于20或最后一个句点的东西。如果我在regex101.com上查看它,它工作正常,如果我在我的网站上从没有功能和预先建立的数据的同一页面运行它,它工作正常。但是当我通过表单发送数据并使用这样的php文件时:

<?php
   include_once'/path/to/functions.php';

   $text = $_POST['text'];

   if ( $a = func($text) !== false ) {
      $b = func($text);
      echo $b;
   }
   else {
      echo "Failed";
   }
?>

匹配20 | 01 | 12和99(也不应该)但不匹配,例如:0.58 | 12.45 | 08.65,我无法上班。我只是不明白为什么会这样。

PD:我不是母语为英语的人,所以我很抱歉任何拼写错误或任何语言语法错误。此外,如果有人可以帮助我使我的正则表达式更快或更短,将非常感激。

1 个答案:

答案 0 :(得分:-1)

嗯,我真的不知道为什么,但是每次我在我的功能上执行一个步骤时,我通过回显包含文本变量的javascript警告消息来解决所有这些问题。然后我将我的功能页面上传到我的服务器,关闭浏览器,清理所有浏览器数据,然后我再次打开它并尝试使用一个错误数据运行表单检查,例如:99,它通过所有过程提醒。然后我尝试了一个好的数据,例如:08.20并且它没有提醒任何消息,并且函数输出是错误的。所以我发现页面缓存出现问题或类似的东西(我不确定它是什么)所以我决定包含一些html标签:

<!DOCTYPE html>
  <html>
  <head>
    <meta http-equiv="Cache-control" content="no-cache">
  </head>
  <body>
     <?php

        // Include functions.php
        // Get POST values.
        // POST data checking code
        // Echo checking result

     ?>
  </body>
</html>

问题解决了。如果有人能向我解释为什么会发生这种情况,那将会非常有帮助。