根本不使用正则表达式怎么办?
并与explode
和一起工作in_array
?
例如,这会做:
$pattern = 'webmaster|admin|webadmin|sysadmin';
$forbidden_words = explode('|', $pattern);
它将您的模式分解为一个数组,使用 | 作为分隔符。
和这个 :
$word = 'admin';
if (in_array($word, $forbidden_words)) {
echo "<p>$word is not OK</p>";
} else {
echo "<p>$word is OK</p>";
}
会得到你
admin is not OK
而这个(相同的代码;只有单词改变):
$word = 'admin2';
if (in_array($word, $forbidden_words)) {
echo "<p>$word is not OK</p>";
} else {
echo "<p>$word is OK</p>";
}
会得到你
admin2 is OK
这样,无需担心找到正确的正则表达式来匹配完整的单词:它只会匹配确切的单词;-)
编辑:一个问题可能是比较区分大小写:-(
使用小写的所有内容将对此有所帮助:
$pattern = strtolower('webmaster|admin|webadmin|sysadmin'); // just to be sure ;-)
$forbidden_words = explode('|', $pattern);
$word = 'aDMin';
if (in_array(strtolower($word), $forbidden_words)) {
echo "<p>$word is not OK</p>";
} else {
echo "<p>$word is OK</p>";
}
会得到你:
aDMin is not OK
i
(我在发布答案后才在正则表达式中看到“ ”标志;因此,必须对其进行编辑)
编辑2:而且,如果你真的想用正则表达式来做,你需要知道:
所以,这样的事情应该做:
$pattern = 'webmaster|admin|webadmin|sysadmin';
$word = 'admin';
if (preg_match('#^(' . $pattern . ')$#i', $word)) {
echo "<p>$word is not OK</p>";
} else {
echo "<p>$word is OK</p>";
}
$word = 'admin2';
if (preg_match('#^(' . $pattern . ')$#i', $word)) {
echo "<p>$word is not OK</p>";
} else {
echo "<p>$word is OK</p>";
}
括号可能不是必需的,但我喜欢使用它们来隔离我想要的东西。
而且,您将获得相同类型的输出:
admin is not OK
admin2 is OK
您可能不想使用[
and ]
:它们的意思是“我们之间的任何字符”,而不是“我们之间的整个字符串”。
并且,作为参考:preg 语法手册;-)