这是问题所在: 这行代码
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,其目的是防止保存特殊字符,因此我想检测它们的存在并拒绝提交的文本。
答案 0 :(得分:3)
我尽量避免使用正则表达式。它太乱了。总有一种更好的方法。看看这个......
$chars = "^<>{}\|";
$text = "Testing bla di bla and more stupid text text text";
if(strpbrk($text, $chars) == false){
echo 'Not Found';
} else {
echo 'char in text';
}
答案 1 :(得分:2)
你的正则表达式都是错误的,而且它也不是很清楚。这是做你想做的更好的方式:
if (preg_match("/[<>}{\\|]/", "Testin{g bla di bla and more stupid text text text")) {
echo "Contains illegal characters!";
exit;
}
在正则表达式中,您需要转义特殊字符\
和|
。我的情况稍微清楚一点。
答案 2 :(得分:1)
我想也许你刚刚把+
弄错了。试试这个:
preg_match("/^([^<>}{\\|]+)$/", "Testing bla di bla and more stupid text text text")
简要说明:由于+
表示以前的“事物”中的一个或多个,因此您的代码告诉它要查找之前的(group)+
中的一个或多个一个或多个([^charactersNotHere]+)
。