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?
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?
Regulärer Ausdruck ist Ihre Antwort.
$str = preg_replace('/[^a-z\d ]/i', '', $str);
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
.\d
gibt es ein Leerzeichen, also sind Leerzeichen in dieser Regex erlaubt.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.+
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.
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.