Antworten:
Klingt so, als hätten Sie fast gewusst, was Sie bereits tun wollten. Sie haben es im Grunde genommen als regulären Ausdruck definiert.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
Für Unicode-Zeichen gilt Folgendes:
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
\w
beinhaltet \d
und so \d
ist das unnötig. Dies ist auch falsch, da dadurch auch Unterstriche in der resultierenden Zeichenfolge (die auch in enthalten ist \w
) verbleiben.
i
Flagge hier wirklich notwendig, da [:alnum:]
bereits beide Fälle abgedeckt sind?
Regulärer Ausdruck ist Ihre Antwort.
$str = preg_replace('/[^a-z\d ]/i', '', $str);
i
steht für Groß- und Kleinschreibung.^
bedeutet, beginnt nicht mit. \d
stimmt mit einer beliebigen Ziffer überein. a-z
stimmt mit allen Zeichen zwischen a
und überein z
. Wegen der i
Parameter Sie müssen nicht angeben a-z
und A-Z
.\d
ein Leerzeichen vorhanden ist, sind in diesem regulären Ausdruck Leerzeichen zulässig.Hier ist eine wirklich einfache Regex dafür:
\W|_
und nach Bedarf verwendet (mit einem /
Schrägstrichbegrenzer).
preg_replace("/\W|_/", '', $string);
Testen Sie es hier mit diesem großartigen Tool, das erklärt, was der Regex tut:
/u
Flagge, da sonst auch Nicht-ASCII-Buchstaben entfernt werden.
[\W_]+
Wenn Sie anstelle der typischen AZ andere Sprachen unterstützen müssen, können Sie Folgendes verwenden:
preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
[^\p{L}\p{N} ]
definiert eine negierte Zeichenklasse (sie entspricht einem nicht definierten Zeichen) von:
\p{L}
: ein Brief aus einer beliebigen Sprache.\p{N}
: ein numerisches Zeichen in einem beliebigen Skript.
: ein Leerzeichen.+
Gierig passt die Charakterklasse zwischen 1 und unbegrenzt oft.Dadurch bleiben Buchstaben und Zahlen aus anderen Sprachen und Skripten sowie aus AZ 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} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界
Hinweis: Dies ist eine sehr alte, aber immer noch relevante Frage. Ich antworte nur, um zusätzliche Informationen bereitzustellen, die für zukünftige Besucher nützlich sein können.
[\W_]+
$string = preg_replace("/[\W_]+/u", '', $string);
Es werden alle nicht AZ, az, 0-9 ausgewählt und gelöscht.
Siehe Beispiel hier: https://regexr.com/3h1rj
\W
ist die Umkehrung \w
davon sind Zeichen A-Za-z0-9_
. Also \W
wird jeder Charakter, der nicht ist, übereinstimmen A-Za-z0-9_
und sie entfernen. Das []
ist eine Zeichensatzgrenze . Das +
ist an einer Zeichensatzgrenze redundant, bedeutet aber normalerweise 1 oder mehr Zeichen. Das u
Flag erweitert den Ausdruck um die Unterstützung von Unicode-Zeichen, dh, es werden keine Zeichen entfernt, die über den Zeichencode 255 hinausgehen, z ª²³µ
. Beispiel für verschiedene Verwendungen 3v4l.org/hSVV5 mit Unicode- und ASCII-Zeichen.
preg_replace("/\W+/", '', $string)
Sie können es hier testen: http://regexr.com/
Ich suchte auch nach der Antwort und wollte jedes Nicht-Alpha bereinigen, und es sollte nicht mehr als ein Leerzeichen geben.
Also habe ich Alex 'Antwort darauf geändert, und das funktioniert für mich.
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
Der obige reguläre Ausdruck wurde sy8ed sirajul7_islam
zu sy ed sirajul islam
Erläuterung: Der reguläre Ausdruck überprüft KEINEN von a bis z, falls er unempfindlich ist oder mehr als ein Leerzeichen enthält, und wird in einen einzelnen konvertiert Platz.
Sie können die Zeichenfolge in Zeichen aufteilen und filtern.
<?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
?>
preg_replace()
Aufruf wirklich unattraktiv .