根本不使用正则表达式呢?
并与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:,如果你真的想用正则表达式来做到这一点,你需要知道:
那么,什么LIK E本应该做的:
$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
你可能不希望使用[
和]
:他们的意思是“这是我们之间的任何字符”,而不是“我们之间的整个弦“。
而作为参考:手册的preg syntax ;-)
大土豆!这是一个翔实的答复,我会检查你说的reg-exp。在阵列当然是一个非常有效的建议来考虑。再次感谢马丁! – Coreus
不客气:-)玩得开心! –
作为旁注:在nick上使用strtolower也很有用,可以控制控制。 – Coreus