web-dev-qa-db-ja.com

文字列から英数字のみを返す関数?

入力文字列を取得し、英数字のみを残してすべての特殊文字を除去することにより、サニタイズされたバージョンを返すPHP関数を探しています。

同じことを行うが、アルファベット文字A〜Zのみを返す2番目の関数が必要です。

助けていただければ幸いです。

83
Scott B

警告:英語はA-Zだけに制限されないことに注意してください。

this を試して、a-z、A-Z、および0-9を除くすべてを削除します。

$result = preg_replace("/[^a-zA-Z0-9]+/", "", $s);

英数字の定義に外国語の文字や古いスクリプトが含まれている場合、Unicode文字クラスを使用する必要があります。

A-Zのみを残すには this を試してください。

$result = preg_replace("/[^A-Z]+/", "", $s);

警告の理由は、履歴書のような単語にはéという文字が含まれており、これには一致しないためです。特定の文字のリストに一致させる場合は、正規表現を調整してそれらの文字を含めます。すべての文字を一致させる場合は、コメントに記載されている適切な文字クラスを使用します。

186
Mark Byers

preg_replaceではなく、常に PHPのフィルター関数 を使用して、FILTER_SANITIZE_STRINGfilter_var()関数を使用できます。

1
Mark Baker