2016-05-28 15 views
1

これは現在、特殊文字でファイル名をクリーンアップするために使用しています。 文字列内の英数字、ハイフン、ピリオド、およびアンダースコア以外の文字をすべて置換します。

  • 時代 - _

  • ハイフンを

    • 英数字-ZA-Z0-9
    • アンダースコア:基本的には、以外のすべてを置き換える必要があります。

      echo preg_replace("/[^a-zA-Z0-9\_\-\.\s]/", "", "A\'s`kljdsg\\\`sk//[email protected]@@//\/\/\#``flkl_dfd-_-sfsfs-fk kgj.docx"); 
      

    それが動作するように思われるが_-場合、私はわかりません。正規表現でそれを使う正しい方法です。

  • 答えて

    2

    -文字クラスは範囲を示します。 0-9。だから、あなたはそれを真ん中に置いておきたいなら、最初にそれを残しておくか、最後にそれをエスケープするべきです。

    また\w => [A-Za-z0-9_]

    最後に、あなたがこの正規表現を使用することができます

    [^\w.-] 
    

    Regex Demo

    PHPコード

    $re = "/[^\\w.-]/"; 
    $str = "A\'skljdsg\\\sk//[email protected]@@////#``flkl_dfd-_-sfsfs-fk kgj.docx"; 
    
    $result = preg_replace($re, "", $str); 
    

    Ideone Demo

    あなたはまた、スペースを含める場合は、あなたが途中でハイフン-を使用している場合は、スラッシュでそれをエスケープする必要があり

    [^\w. -] 
    
    +0

    Seleその記述性に対する答えとしてこれを引用した。 Pytonによって提供されたものも正確です。 – mishka

    +0

    '[^ \ w。 - ] 'スペースでスペースを置き換えていないregex101任意のアイデアで試してみましたか? – mishka

    +0

    @Manjuありがとう。もしあなたが私の最初の行に従うならば、自分の正規表現を変更することができます。 – rock321987

    1

    を使用します。

    preg_replace("/[^a-zA-Z0-9_\-.\s]/", "", "A\'skljdsg\\\sk//[email protected]@@////#``flkl_dfd-_-sfsfs-fk kgj.docx"); 
    

    またはそれを上に置きます終了:

    "/[^a-zA-Z0-9_.\s-]/" 
    
    関連する問題