web-dev-qa-db-ja.com

英数字以外の文字を削除する方法

a-z A-Z 0-9セットに含まれていない、またはスペースではない文字列からすべての文字を削除する必要があります。

誰かがこれを行う機能を持っていますか?

314
zuk1

あなたがすでにやりたいことをほとんど知っているように聞こえます、あなたは基本的に正規表現としてそれを定義しました。

preg_replace("/[^A-Za-z0-9 ]/", '', $string);
640
Chad Birch

Unicode文字の場合は、次のとおりです。

preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
158
voondo

正規表現 あなたの答えです。

$str = preg_replace('/[^a-z\d ]/i', '', $str);
  • iは、大文字と小文字を区別しないことを表します。
  • ^は、で始まらないことを意味します。
  • \dは任意の数字と一致します。
  • a-zは、azの間のすべての文字と一致します。 iパラメーターがあるため、a-zおよびA-Zを指定する必要はありません。
  • \dの後にスペースがあるので、この正規表現ではスペースを使用できます。
48
raspi

これは本当に簡単な正規表現です。

\W|_

そして必要に応じて使用されます(スラッシュ区切りのフォワード/と共に)。

preg_replace("/\W|_/", '', $string);

正規表現が何をしているのかを説明するこの素晴らしいツールを使って、ここでそれをテストしてください。

http://www.regexr.com/

16
Alex Stephens
[\W_]+

$string = preg_replace("/[\W_]+/u", '', $string);

A〜Z、a〜z、0〜9以外をすべて選択して削除します。

ここでの例を参照してください。 https://regexr.com/3h1rj

5
Intacto

一般的なA〜Zの代わりに他の言語をサポートする必要がある場合は、以下を使用できます。

preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
  • [^\p{L}\p{N} ]は否定された否定されたnotdefinedの文字にマッチします) :
    • \p{L}任意の言語からの手紙。
    • \p{N}anyスクリプト内の数字。
    • :スペース文字.
  • +greedlyは、1からまでの文字クラスと無制限の回数に一致します。

これはA-Zと同様に他の言語と文字からの文字と数字を保存します:

preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
preg_replace('/[^\p{L}\p{N} ]+/', '', '[email protected]~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '你好世界[email protected]£$%^&*()'); // 你好世界

注:これは非常に古いですが、それでも関連のある質問です。私は純粋に将来の訪問者に役立つかもしれない補足情報を提供するために答えています。

4
Jonathon
preg_replace("/\W+/", '', $string)

あなたはここでそれをテストすることができます: http://regexr.com/

2
DOZ

私も答えを探していました、そして私の意図はすべての非アルファをきれいにすることでした、そして、1つ以上のスペースがあるべきではありません。
それで、私はこれに対するアレックスの答えを修正しました、そしてこれは私のために働いていますpreg_replace('/[^a-z|\s+]+/i', ' ', $name)
上記の正規表現はsy8ed sirajul7_islamsy ed sirajul islamに変換しました
説明:正規表現では、区別できない方法または複数の空白がある場合、aからzまでNOT ANYをチェックしますそして、それは単一のスペースに変換されます。

0
ssi-anik

文字列を文字に分割してフィルタリングできます。

<?php 

function filter_alphanum($string) {
    $characters = str_split($string);
    $alphaNumeric = array_filter($characters,"ctype_alnum");
    return join($alphaNumeric);
}

$res = filter_alphanum("a!bc!#123");
print_r($res); // abc123

?>
0
zekel