Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_match未返回正确的值?_Php_Preg Match - Fatal编程技术网

Php preg_match未返回正确的值?

Php preg_match未返回正确的值?,php,preg-match,Php,Preg Match,所以为了测试我的代码,我让它返回“0”表示false,返回“1”表示true。现在,这里是我对这段代码的测试 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 inpu

所以为了测试我的代码,我让它返回“0”表示false,返回“1”表示true。现在,这里是我对这段代码的测试

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");
这只会使用user&title类型进行测试,但它们都会按照精确的顺序返回这些结果

`00011`

我不认为我做了任何错误的事情,因为当我在Regexr中使用它时,它表明它是正确的(至少我认为它是正确的)

在您的
标题
块中,您使用以下内容:

preg_match('/[^0-9a-z\s-\'!?#_]/i', $input)
preg_match('/^[a-zA-Z0-9_]+$/', $input)
这意味着,如果我看到任何不是(
^
0-9
a-z
\s
-
'
,返回
1
。在前三个输入中,您给出的是纯
a-z
,因此它给出的是
0
。而在第四次输入中,您给出了一个
,我相信您的正则表达式有3个问题,其中
if($type==“title”){…
if($type==“body”){..

这两种语言的正则表达式:
/[^0-9a-z\s-\'!?\u]/i

  • 第一个问题是“^”在“[]”的内部,当它在内部否定括号内的任何内容时,它会查找不包含这些内容的字符
  • 第二个问题是表达式的开头应该有一个“^”,结尾应该有一个“$”。这意味着只有当所有字符都符合要求时才返回true
  • 第三个很小,请记住在结束“]”之后有一个+符号,以指示是否在括号中找到一个或多个字符

  • 您的最后一个正则表达式应该看起来像
    ^/[0-9a-z\s\-\'!?#+$/i

    那么期望值是多少呢?因为输入和输出都是正确的:)如果字符串中的字符与模式不匹配,则假定返回false……如果您阅读我的PHP代码,其中说明此输入应该有效,而此输入不应该有效,我想这就是我的观点:p我不知道如何更好地解释它,不是吗“安全”输入应该是真的,“不安全”输入应该是假的。所以你希望它是
    11101
    ,对吗?一定要把它包括在问题中,这样我们才能帮助:)而不是regex使用filter\u var:啊,是的,你是对的。我确实搞砸了,我对preg\u match还是个新手,我复制的表达式主要是从“社区”复制的Regexr部分,非常感谢!
    preg_match('/^[a-zA-Z0-9_]+$/', $input)