所以为了测试我的代码,我让它返回" 0"为假和" 1"真的。现在,这里是我对此代码的测试。
echo input("title", "asdfasdfasdfasdfasdfasdfasdf should be safe input");
echo input("title", "sdfsdfsdf sdfsdfsdf should be safe input");
echo input("title", "Omg what's this should be safe input");
echo input("title", "<a href>This should not be safe input");
echo input("user", "This_should_be_safe");
以下是我的代码
function input($type, $input) {
global $config, $alert;
if ($type == "user") {
if (preg_match('/^[a-zA-Z0-9_]+$/', $input))
return "1";
else
return "0";
} else if ($type == "safetitle") {
if (preg_match('/^[a-zA-Z0-9_]+$/', $input))
return true;
else
return false;
} else if ($type == "title") {
if (preg_match('/[^0-9a-z\s-\'!?#_]/i', $input))
return "1";
else
return "0";
} else if ($type == "body") {
if (preg_match('/[^0-9a-z\s-\'!?#_]/i', $input))
return true;
else
return false;
}
}
仅对用户&amp;标题类型,但他们都按照这个确切的顺序返回这些结果。
`00011`
我不认为我做错了什么,因为我在Regexr中使用它时表明它是正确的(至少我认为它确实如此)
答案 0 :(得分:0)
在title
区块中,您可以使用:
preg_match('/[^0-9a-z\s-\'!?#_]/i', $input)
这意味着,如果我看到任何不是(^
)0-9
,a-z
,\s
,-
,'
,{ {1}},!
,?
,#
,返回_
。在前三个输入中,您将提供纯1
,因此它会为您提供a-z
。在您的第四个输入中,您在文本中提供0
,因此它会给出<
。如果你想反转结果,你只需要删除否定1
。
在^
块中,您可以使用:
user
这意味着,任何preg_match('/^[a-zA-Z0-9_]+$/', $input)
,a-z
,A-Z
和0-9
位于开头和&amp;之间。结束,将返回_
。因此这是正确的。
我不能推荐一个更好的解决方案,因为你没有告诉我们你的主要目标是什么,这段代码看起来像做某种卫生,我不建议做这样的,因为它根本没有涵盖所有这些。
答案 1 :(得分:0)
if ($type == "title") {...
和if($type == "body") {..
你的正则表达式:/[^0-9a-z\s-\'!?#_]/i
你的最终正则表达式应该像^/[0-9a-z\s\-\'!?#_]+$/i