4

文字列の左右から英数字以外の記号をすべて削除し、文字列の中央にある記号を残します。

ここで同様の質問をしましたが、良い解決策は次のとおりです。

$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', $str);

ただし、ąĄćĆęĘ などの記号も削除されますが、アルファベット記号のままではいけません。

上記の例は次のようになります。

~~AAA~~  => AAA (OK)
~~AA*AA~~ => AA*AA (OK)
~~ŚAAÓ~~  => AA (BAD)
4

2 に答える 2

4

u正規表現を使用している間は、Unicode のフラグを使用していることを確認してください。

以下はあなたの入力で動作します:

$str = preg_replace('/^\W*(.*\w)\W*$/u', '$1', '~~ŚAAÓ~~' );

// str = ŚAAÓ

しかし、これは機能しません: (使用しないでください)

$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', '~~ŚAAÓ~~' );
于 2013-07-04T10:17:58.173 に答える
3

有効な文字のリストを渡して、そのリストにない文字を置換するように関数に指示できます。

$str = preg_replace('/[^a-zA-Z0-9*]+/', '', $str);

角括弧は、この範囲内のすべてを選択することを示しています。カラット ( ^) は not の正規表現です。次に、有効な文字 (小文字の a から z、大文字の a から z、0 から 9 の数字、およびアスタリスク) をリストします。角括弧の末尾にあるプラス記号は、0 個以上の文字を選択することを示しています。

編集:

これが保持したいすべての文字のリストである場合、次のようになります。

$str = preg_replace('/[^ĄąĆ毿ŹźŃńŁłÓó*]+/', '', $str);

于 2013-07-04T10:10:23.713 に答える