正規表現をまったく使用しないのはどうですか?
そして、と一緒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
このように、完全な単語に一致するために、適切な正規表現を見つけることを心配する必要はありません:それは正確な単語に一致するだけです;-)
編集: 1つの問題は、比較で大文字と小文字が区別されることです:-(
すべてを小文字で操作すると、大文字と小文字が区別されます:
$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
あなたはおそらく使いたくないでしょう:それらは「私たちの間にあるすべての文字」を意味し[
、]
「私たちの間にある文字列全体」を意味するのではありません。
そして、参考として:preg構文のマニュアル;-)