web-dev-qa-db-ja.com

PHP文字列からシンボルを削除する

インターネットとこのウェブサイトを検索したところ、この件に関するいくつかのトピックが見つかりました。挿入された文字列にラテンアルファベットの文字のみを含める必要がある場合、解決策は無数にありますが、他のアルファベットのテキストが必要な場合は少し注意が必要です。

PHPすべての記号を文字列から削除できるが、すべてのUTF-8アルファベットの実際の文字は残しておく方法はありますか?キーボードのすべての文字の配列を作成しようとしました次に、str_replaceまたはpreg_replaceを使用してそれらを削除しますが、国によってキーボードの記号が異なることもあります。たとえば、qwertyキーボードには_£_記号がありません。持っているかもしれません。

私はこれが奇妙な質問であることを知っています。私が見逃した可能性のある簡単な解決策があるかどうか疑問に思っています。

どんな助けでも大歓迎です!

編集: OKいくつかのより優れた拡張されたGoogle処理の後で、次の正規表現が必要なものにうまく機能し、すべての種類のアルファベットのすべての文字を保持し、すべての記号を削除することがわかりました。他の誰かが同じことをする必要がある場合に備えて、ここでそれを共有しています。

$string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);

12

解決策はこれです:$string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);

36
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.

$string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.

echo $string; // output will be abcdef-g for 'a|"bc!@£de^&$f g'
15
Arpit Gaur

これを試して:

<?php

$string = "Remove these characters: £äó";
$string = preg_replace('/[^(\x20-\x7F)]*/','', $string);
echo $string;
?>
1
Vijaya Pandey

他の回答と同様に、許可する文字(たとえば、サポートする各アルファベットから)の正規表現を作成し、他の文字を削除します。これが nicodeブロックの範囲 のリストで、文字の値/範囲を取得します言語ごとに-それはあなたが自分でコンパイルする必要があるものです。

1
mark

Unicode文字と数字をチェックすることは可能ですが、PCREが
--enable-unicode-properties。この場合、正規表現\p{Nl}を使用できます。これは、Unicodeの文字と数字に一致します。 PHPにあるユニコード正規表現の詳細は ドキュメント にあります

EDIT:質問への編集後

シンボルを取得するには、\Pの代わりに\pを使用します。上記でリンクしたPHPドキュメントをもう一度参照してください。

1
RMcLeod