大家好,我想知道如何构建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!!";
但它不起作用
为什么?
感谢
卢卡
答案 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}$/
所以,它变成了:
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";
}
这一切都正常。请不要在每个单词周围使用括号。