2011-08-15 29 views
1

この質問は確かに数回尋ねられていますが、私は正規表現に問題がありますので... PHPでやりたい(単純な)事はここにあります:PHP文字列内の選択された文字を置き換えます。

文字列の不要な文字を置き換える関数を作りたい。 a-z A-Z 0-9 _ - +(){}#äöüÄÖÜspace

他のすべての文字を "_"に変更します。ここではいくつかのサンプルコードはあるが、私はのために記入するのか分からない?????:

<?php 

// sample strings 
$string1 = 'abd92 s_öse'; 
$string2 = 'ab! sd$ls_o'; 

// Replace unwanted chars in string by _ 
$string1 = preg_replace(?????, '_', $string1); 
$string2 = preg_replace(?????, '_', $string2); 

?> 

出力は次のようになります。 $ string1の:abd92s_öse(同) $ string2の:ab_ sd_ls_o

私はそれをaz、0-9で動作させることができましたが、これらの追加文字、特にäöüを許可するとよいでしょう。あなたのご意見ありがとうございます!

答えて

2

あなたが言及した特定のものだけでなく、ロシア語やギリシャ語のようなもの、またはその他のタイプのアクセント記号:

$str = preg_replace("/[^\w+(){}#\s-]/", "_", $str); 

もし私があなただったら、最後のものと一緒に行きます。読むのが短くて簡単ですばかりでなく、制限が少なく、иなどのようなものをブロックすることに特別な利点はありません。äöüÄÖÜがすべて問題ない場合。

+0

私はブラウザのURLを介してこれらの文字列を渡すのでわからない。さらに特殊な文字を許可すると問題が発生する可能性はありますか? – andreas

+1

@andreas - その場合、** ['urlencode'](http://php.net/manual/en/function.urlencode.php)**をそれらを渡すことを検討してください。彼らがそうでないならば、「äöüÄÖÜ」はあなたにとにかく問題を与えるでしょう。通常、 'и'やその他の非ASCII文字は、ASCII以外の文字でもあるので、どこでも'ööüÄÖÜ'を使うことができます。 –

+0

基本的に 'ööüÄÖÖÜ'を使うことができれば'и'、 'φ'、'ೃೃ'、または非ラテンアルファベットの他の文字には問題がありません。 –

1

[^a-zA-Z0-9_\-+(){}#äöüÄÖÜ ]_に置き換えます。

$string1 = preg_replace('/[^a-zA-Z0-9_\-+(){}#äöüÄÖÜ ]/', '_', $string1); 

これは、[文字セット]

編集中^後のものを除く任意の文字を置き換えます:-ダッシュを免れました。 - だけでなく、

$str = preg_replace("/[^a-zA-Z0-9_+(){}#äöüÄÖÜ\s-]/", "_", $str); 

異なるアルファベットから文字を許可するには:すべての空白だけではなく、(空白)文字ができるようにするには

$str = preg_replace("/[^a-zA-Z0-9_+(){}#äöüÄÖÜ -]/", "_", $str); 

:あなたが説明しただけで、正確な文字を許可するように

+1

真ん中の部分、 '_- +'が間違っています。それは '_'と' + 'の間の範囲を見つけようとします。あなたが文字通り取られたければ、 ' - 'を文字クラスの先頭または末尾に移動する必要があります。 –

+0

Heheありがとう、私はすでにエラーが出てきた理由を知りました(警告:preg_replace()[function.preg-replace]:コンパイルに失敗しました:文字列のオフセットが13の文字列で/home/www/action.phpオンライン52) – andreas