4

ユーザーがテキストエリアを介してファイル名を変更できるようにしましたが、正規表現の問題が発生しています。

Windows 7 で確認したように、これらの文字のみがファイル名に使用できません。

\ / : * ? < > |

しかし、私は頑固に、おそらく賢明にも、正規表現をこれらの特殊文字のみに最小限に抑えることを選択します。

- _ .

他のすべてをカットする必要があります。

誰かがこの正規表現で私を助けることができますか?

preg_replace all but: A-Za-z0-9および- _ .

まだまだ本当に腑に落ちません。

4

2 に答える 2

15
preg_replace('/[^A-Za-z0-9 _ .-]/', '', $filename);

[] は文字クラスで、^ はそれを否定します。したがって、文字通り、そのグループの文字以外のものと一致します。

が最後にあることに注意してください-。これは、他の場所で使用される場合は特別な範囲文字です (例: 0-9)。

于 2012-12-04T15:21:27.360 に答える
4

あなたの質問には、すでにかなりレイアウトされた文字セットがあります。プラグインするだけで動作しますpreg_replace()

これを試して:

$filename = preg_replace('/[^a-zA-Z0-9_.-]/', '', $filename);

^で囲まれた文字セットの先頭にある は、文字のリストと一致[]ないことを示しています。したがって、この行は「次ではない文字を置き換えてください」と読むことができます。

于 2012-12-04T15:21:51.737 に答える