的preg_match停止执行代码这里的问题: 这行代码PHP没有错误
preg_match("/^([^<>}{\|])+$/", "Testing bla di bla and more stupid text text text")
完全停止我的脚本。 如果我把最后一个“文本”从它中拿出来,它会起作用并给我一个结果。
原代码是不是我的,我不擅长用正则表达式,但这个想法是检查以下任何特殊字符在文本:
^ < > { } \ |
在我的搜索,我发现一些关于PREG_RECURSION_LIMIT_ERROR
,但将其设置为10000并没有改变任何东西。 preg_last_error()
也没有帮助,因为脚本只能在输出或记录任何内容之前停止。 PHP错误日志中没有任何内容。
我有两个问题:
- 为什么它只是停止没有任何通知?
- 是否有更好的方法来编写可能不会导致此问题的正则表达式模式?
谢谢!
PS:我正在运行PHP 5.2.9版本,其目的是为了防止特殊字符被保存,所以我想检测它们的存在并拒绝提交的文本。
什么是-1?我不只是要求正则表达式的帮助,但我有我认为没有错误记录的合法技术问题,并且我至少已经完成了一些研究,如我所述...... – semmelbroesel
您可以尝试PHP的filter_var()。 http://php.net/manual/en/function.filter-var.php我不知道它的速度。如果你知道这只是文本,那么其中一个ctypes也可能有帮助。也许这个正则表达式'[\^<> \} \ {\ |] +'会很有用。留下前导'^'和尾部'$'将使它只匹配符号,如果它们是匹配的短语的开始和结尾。 – asafreedman
_“为什么它只是在没有任何通知的情况下停下来?”_这意味着你会造成一个致命的错误。定义error_reporting和error_log不是在你的脚本中,而是在更早的时候(.htaccess,webserver config,php.ini),它会记录它遇到的致命错误。 – Wrikken