Ich muss alle Zeichen aus einer Zeichenfolge entfernen, die nicht im a-z A-Z 0-9
Satz oder keine Leerzeichen sind.
Hat jemand eine Funktion, um dies zu tun?
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:
quelle
\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.
i
steht für Groß- und Kleinschreibung.^
bedeutet, beginnt nicht mit.\d
stimmt mit einer beliebigen Ziffer überein.a-z
stimmt mit allen Zeichen zwischena
und übereinz
. Wegen deri
Parameter Sie müssen nicht angebena-z
undA-Z
.\d
ein Leerzeichen vorhanden ist, sind in diesem regulären Ausdruck Leerzeichen zulässig.quelle
Hier ist eine wirklich einfache Regex dafür:
und nach Bedarf verwendet (mit einem
/
Schrägstrichbegrenzer).Testen Sie es hier mit diesem großartigen Tool, das erklärt, was der Regex tut:
http://www.regexr.com/
quelle
/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:
[^\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:
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.
quelle
Es werden alle nicht AZ, az, 0-9 ausgewählt und gelöscht.
Siehe Beispiel hier: https://regexr.com/3h1rj
quelle
\W
ist die Umkehrung\w
davon sind ZeichenA-Za-z0-9_
. Also\W
wird jeder Charakter, der nicht ist, übereinstimmenA-Za-z0-9_
und sie entfernen. Das[]
ist eine Zeichensatzgrenze . Das+
ist an einer Zeichensatzgrenze redundant, bedeutet aber normalerweise 1 oder mehr Zeichen. Dasu
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.Sie können es hier testen: http://regexr.com/
quelle
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
zusy 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.
quelle
Sie können die Zeichenfolge in Zeichen aufteilen und filtern.
quelle
preg_replace()
Aufruf wirklich unattraktiv .