一部の文字がエスケープされているため(preg_match関数に渡される前に文字列の一部としてエスケープされているため)、回答はコンパイルされません。
あなたは二重の脱出を試みることができます:
if (preg_match("/[^a-zA-Z0-9\\.\\-\\'\s]/", $some_var)){
echo "Invalid characters";
}
ただし、ドット、ハイフン、アポストロフィをエスケープする必要はないため、次のように簡略化できます。
if (preg_match("/[^a-zA-Z0-9.'\s-]/", $some_var)){
echo "Invalid characters";
}
文字範囲と間違えられないように、ハイフンは最後に移動されることに注意してください。個人的には、他の開発者が誤ってリストの最後に新しい文字を追加して予期しない動作を引き起こすのを防ぐために、それをエスケープすることを好みます。
それで:
if (preg_match("/[^a-zA-Z0-9.\\-'\s]/", $some_var)){
echo "Invalid characters";
}
最後に、入力($some_var
変数)を確認することをお勧めします-PHPがこれを追加することがあるため、これには実際にバックスラッシュが含まれていますか(たとえば、ユーザーは「できない」と入力しますが、「できない」として送信されます)最初に行う必要があるかもしれませんstripslashes
)。
例えば。
if (preg_match("/[^a-zA-Z0-9.\\-'\s]/", stripslashes($some_var))){
echo "Invalid characters";
}