422 Stimmen

Wie entfernt man nicht alphanumerische Zeichen?

Ich muss alle Zeichen aus einer Zeichenkette entfernen, die nicht in a-z A-Z 0-9 gesetzt oder sind keine Leerzeichen.

Hat jemand eine Funktion, die dies ermöglicht?

824voto

Chad Birch Punkte 70946

Hört sich an, als wüssten Sie schon fast, was Sie tun wollen, denn Sie haben es im Grunde als Regex definiert.

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

192voto

voondo Punkte 2452

Bei Unicode-Zeichen ist es :

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

59voto

raspi Punkte 5634

Regulärer Ausdruck ist Ihre Antwort.

$str = preg_replace('/[^a-z\d ]/i', '', $str);
  • El i steht für case insensitive.
  • ^ bedeutet, beginnt nicht mit.
  • \d entspricht einer beliebigen Ziffer.
  • a-z findet alle Zeichen zwischen a y z . Wegen der i Parameter müssen Sie nicht angeben a-z y A-Z .
  • Nach \d gibt es ein Leerzeichen, also sind Leerzeichen in dieser Regex erlaubt.

41voto

Jonathon Punkte 14630

Wenn Sie andere Sprachen unterstützen müssen, können Sie anstelle des üblichen A-Z die folgenden verwenden:

preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
  • [^\p{L}\p{N} ] definiert eine verneint (Er passt auf ein Zeichen, das no definiert) Zeichenklasse von:
    • \p{L} : ein Brief von jede Sprache.
    • \p{N} : ein numerisches Zeichen in jede Drehbuch.
    • : ein Leerzeichen.
  • + gierig entspricht der Zeichenklasse zwischen 1 und unbegrenzt Zeiten.

So bleiben Buchstaben und Zahlen aus anderen Sprachen und Schriften sowie A-Z erhalten:

preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
preg_replace('/[^\p{L}\p{N} ]+/', '', 'abc@~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '!@£$%^&*()'); // 

Nota: Dies ist eine sehr alte, aber immer noch aktuelle Frage. Ich antworte nur, um zusätzliche Informationen zu liefern, die für künftige Besucher nützlich sein könnten.

17voto

Alex Stephens Punkte 2771

Hier ist eine wirklich einfache Regex für das:

\W|_

und je nach Bedarf verwendet werden (mit einem Vorwärts / Schrägstrich als Trennzeichen).

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

Testen Sie es hier mit diesem großartigen Tool, das erklärt, was die Regex tut:

http://www.regexr.com/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X