preg_match多个表达式

时间:2011-02-24 17:58:04

标签: php regex preg-match

大家好,我想知道如何构建e regExp,说:

“此字符串可能包含1-25个不是这些特定字词的字母:”root“,”bin“,”download“,”shutdown“

所以我想:

$dang_words="/(root)|(bin)|(shutdown)|(download)/";
$reg_exp="/^[a-z]{1,25}$/";

if(preg_match($reg_exp,$field) || !preg_match($dang_words,$field))
{
 echo "your input it's okkk!";
}
else 
 echo "this is a bad word!!";

但它不起作用

为什么?

感谢

卢卡

3 个答案:

答案 0 :(得分:5)

$dangerous_words="/(root)|(bin)|(shutdown)|(download)/";
$reg_exp="/^[a-z]{1,25}$/";

if(preg_match($reg_exp,strtolower(trim($field))) && !preg_match($dangerous_words,strtolower(trim($field))))
{
 echo "your input it's okkk!";
}
else 
 echo "this is a bad word!!";

你的逻辑运算符搞砸了......刚从||改变了到&&。

答案 1 :(得分:4)

关闭...试试这个:

/^(?!.*(root|bin|shutdown|download))[a-z]{1,25}$/

它使用forward assertion

所以,它变成了:

if (preg_match('/^(?!.*(root|bin|shutdown|download))[a-z]{1,25}$/', $content)) {
    echo "Your input is ok";
} else {
    echo "there is a bad word/invalid content";
}

答案 2 :(得分:0)

我认为你的问题在于所有的()。在我之前创建的一些旧代码中,我使用了这个代码:

$stopInjectionVerbs = "/(alter|begin|cast|convert|create|cursor|declare|delete|drop|end|exec|fetch|insert|kill|open|select|sys|table|update)/";
$errors = array();

if (preg_match($stopInjectionVerbs, $select)) {
    $errors[] = "Can not use SQL injection Strings";
}

这一切都正常。请不要在每个单词周围使用括号。