php RegEx在我的本地服务器上工作 - 不在运行php4的远程主机上工作

时间:2011-01-07 20:13:46

标签: php regex

我很确定我知道问题是什么,但是我无法解决它的问题,而我现在还不知道该怎么做。

我要做的就是确定名字和姓氏字段的输入。此代码正在运行php5的本地服务器上运行:

    <?php 
$regex = "John's Jerod";
 if (!preg_match("/^[A-Za-z\'\,\.\s]+$/", $regex)) {
          echo "ERROR!";
      } else {
   echo "NO ERROR!";
   }
?>

正如预期的那样,这会返回NO ERROR!,但是当我在我的实时服务器上运行它时,我只会获得具有相同数据的ERROR。

我已经确定这是逗号扔掉了!而且我很确定,因为我正在运行的php版本在John的名字中执行自动转义,所以我在所有输出上运行了striptags并且仍然出现相同的错误。

有人知道我做错了什么或我如何解决这个问题?

截至目前,我已经在“虫子”中待了大约8个小时。经过RegEex的40多种变化而没有运气。

我检查并三重检查了我的所有表单字段名称,变量等,以确保所有内容匹配,其他一切正常。

SOS

2 个答案:

答案 0 :(得分:1)

尝试专门检查1。根据文档,它会在错误时返回FALSE(严格检查),对于没有匹配会返回0(严格检查),如果匹配则返回1(因为它在一个位置停止)。

另外,根据我自己的喜好,我使用〜符号表示我的正则表达式。就像David Powers所说的那样(只是他根本没有纠正它),你不需要大部分的反斜杠(仅适用于时期和空间)。

<?php 
$regex = "John's Jerod";
 if (preg_match("~^[A-Za-z',\.\s]+$~", $regex) !== 1) {
          echo "ERROR!";
      } else {
   echo "NO ERROR!";
   }
?>

希望这有帮助!

编辑:另外,您说您正在使用strip_tags?剥离字符串中的任何HTML标记 - 而不是斜杠。您需要strip_slashes来删除斜杠, strip_tags;)

答案 1 :(得分:0)

你的正则表达式不需要所有那些反斜杠。它应该是这样的:

"/^[A-Za-z',\.\s]+$/"

另外,您可以参考使用striptags()。如果您的服务器启用了魔术引号,您应该使用stripslashes()。

[编辑正则表达式]