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);
\wbeinhaltet \dund so \dist das unnötig. Dies ist auch falsch, da dadurch auch Unterstriche in der resultierenden Zeichenfolge (die auch in enthalten ist \w) verbleiben.
iFlagge 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);
isteht für Groß- und Kleinschreibung.^ bedeutet, beginnt nicht mit. \d stimmt mit einer beliebigen Ziffer überein. a-zstimmt mit allen Zeichen zwischen aund überein z. Wegen der iParameter Sie müssen nicht angeben a-zund A-Z.\dein 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:
/uFlagge, 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
\Wist die Umkehrung \wdavon sind Zeichen A-Za-z0-9_. Also \Wwird 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 uFlag 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_islamzu 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 .