0

文字、数字、ドット、ハイフン、アポストロフィ、スペース以外のものを含む文字列を除外する必要があります。

文字、数字、ドット、ハイフン、スペースを含む文字列はテストに合格しますが、アポストロフィが含まれていると失敗します。(ドットとハイフンのエスケープ文字は何の違いもないように見えるので、念のために入れました)

これについて何か考えはありますか?

if (preg_match("/[^a-zA-Z0-9\.\-\'\\s]/", $some_var)){
    echo "Invalid characters";
}
4

2 に答える 2

1

一部の文字がエスケープされているため(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"; 
} 
于 2012-06-20T09:28:19.537 に答える
0

これを試して:

if (preg_match("/[^a-zA-Z0-9.'\s-]/", $some_var)){
      echo "Invalid characters";
}
于 2012-06-20T09:17:12.037 に答える