alles ersetzen, was keine Zahlen sind
Sven
- php
Hi
ich möchte aus ein String alles in ein Komma ersetzen, was keine Zahlen sind.
Welche Möglichkeiten habe ich da?
Sven
Hi
ich möchte aus ein String alles in ein Komma ersetzen, was keine Zahlen sind.
Welche Möglichkeiten habe ich da?Sven
Hi,
dazu benutzt man am besten einen regulären Ausdruck zusammen mit der Funktion preg_replace();
Das Ganze sieht dann so aus:
$string = preg_replace('/\D/', ',', $string);
MfG
Blizz
Hi
dazu benutzt man am besten einen regulären Ausdruck zusammen mit der Funktion preg_replace();
Das Ganze sieht dann so aus:
$string = preg_replace('/\D/', ',', $string);
diese Zeile ersetzt doch alle Zahlen in ein "," oder?
Ich möchte alle andere als Zahlen ersetzen, das Ergebnis also negiert ;-)
Sven
Hi
dazu benutzt man am besten einen regulären Ausdruck zusammen mit der Funktion preg_replace();
Das Ganze sieht dann so aus:
$string = preg_replace('/\D/', ',', $string);diese Zeile ersetzt doch alle Zahlen in ein "," oder?
Ich möchte alle andere als Zahlen ersetzen, das Ergebnis also negiert ;-)
gut wäre auch, wenn aufeinander folgende Kommas automatisch durch eins ersetzt werden
Sven
Hi
dazu benutzt man am besten einen regulären Ausdruck zusammen mit der Funktion preg_replace();
Das Ganze sieht dann so aus:
$string = preg_replace('/\D/', ',', $string);diese Zeile ersetzt doch alle Zahlen in ein "," oder?
Ich möchte alle andere als Zahlen ersetzen, das Ergebnis also negiert ;-)gut wäre auch, wenn aufeinander folgende Kommas automatisch durch eins ersetzt werden
Sven
Hmm... also bei mir (PHP5) steht \D für alles außer Zalen ([^0-9]).
Wenn du immer maximal ein Komma haben willst, sollte das klappen:
$string = preg_replace('/\D+/', ',', $string);
MfG
Hi
Hmm... also bei mir (PHP5) steht \D für alles außer Zalen ([^0-9]).
Wenn du immer maximal ein Komma haben willst, sollte das klappen:
$string = preg_replace('/\D+/', ',', $string);
ich habe das kleine D mit dem großen verwechselt :-\
somit ist meine Frage auch hinfällig ;-)
Sven
Hi
Hmm... also bei mir (PHP5) steht \D für alles außer Zalen ([^0-9]).
Wenn du immer maximal ein Komma haben willst, sollte das klappen:
$string = preg_replace('/\D+/', ',', $string);
kann man auch noch ein bestimmtes Zeichen z.B. % von der Ersetzung ausschliessen?
Sven
Hi
Hmm... also bei mir (PHP5) steht \D für alles außer Zalen ([^0-9]).
Wenn du immer maximal ein Komma haben willst, sollte das klappen:
$string = preg_replace('/\D+/', ',', $string);kann man auch noch ein bestimmtes Zeichen z.B. % von der Ersetzung ausschliessen?
Sven
Hi,
klar geht das:
$string = preg_replace('/[^\d%]+/', ',', $string)
Wegen dem [^ wird nur das ersetzt was nicht in den eckigen Klammern steht. Darum diesmal das kleien d (alle Ziffern).
Alle Zeichen die auch nicht ersetzt werden sollen, kannst du hintendran hängen (und ggf. escapen).
mfg
Hi
kann man auch noch ein bestimmtes Zeichen z.B. % von der Ersetzung ausschliessen?
klar geht das:
$string = preg_replace('/[^\d%]+/', ',', $string)Wegen dem [^ wird nur das ersetzt was nicht in den eckigen Klammern steht. Darum diesmal das kleien d (alle Ziffern).
Alle Zeichen die auch nicht ersetzt werden sollen, kannst du hintendran hängen (und ggf. escapen).
ich darf jetzt wohl nicht erzählen, dass ich gerade ein wildes Konstrukt dafür erstellt habe, oder? ;-)
ich habe noch folgendes geschrieben
if(substr($string, 0, 1) == ','){
$string = substr($string, 1);
}
if(substr($string, -1) == ','){
$string = substr($string, 0, -1);
}
geht das auch noch in den Regex rein?
ich sollte mich mal damit intensiver beschäftigen :-)
Sven
Hi
kann man auch noch ein bestimmtes Zeichen z.B. % von der Ersetzung ausschliessen?
klar geht das:
$string = preg_replace('/[^\d%]+/', ',', $string)Wegen dem [^ wird nur das ersetzt was nicht in den eckigen Klammern steht. Darum diesmal das kleien d (alle Ziffern).
Alle Zeichen die auch nicht ersetzt werden sollen, kannst du hintendran hängen (und ggf. escapen).ich darf jetzt wohl nicht erzählen, dass ich gerade ein wildes Konstrukt dafür erstellt habe, oder? ;-)
ich habe noch folgendes geschrieben
if(substr($string, 0, 1) == ','){
$string = substr($string, 1);
}
if(substr($string, -1) == ','){
$string = substr($string, 0, -1);
}
> geht das auch noch in den Regex rein?
>
> ich sollte mich mal damit intensiver beschäftigen :-)
>
> Sven
Das war schon ein bisschen aufwendiger^^
Die einfachere Variante ist sicher mit zwei replace Funktionen:
$string = preg\_replace('/(^,)|(,$)/','',preg\_replace('/[^\d%]+/', ',', $string ));
Aber ich habs auch in einen Regexp reinbekommen:
$string = preg\_replace('/([^\d%])+/e', 'substr($string ,0,1) == substr($1,0,1) || substr($string ,-1,1) == substr($1,-1,1) ? "" : ","', $string ).'<br />';
Da bei der zweiten Variante noch mit PHP evaluiert wird, halte ich das für auswendiger als die erste Variante.
mfg
Blizz
Hi
Die einfachere Variante ist sicher mit zwei replace Funktionen:
$string = preg_replace('/(^,)|(,$)/','',preg_replace('/[^\d%]+/', ',', $string ));
sieht sehr gut aus ;-)
bleibt nur noch die Frage, ob man im regex aufeinander folgende Prozentzeichen durch eins ersetzen kann, oder ob man dafür ein weiteren regex braucht :)
https://forum.selfhtml.org/?t=147081&m=954472
Sven
Hi
Die einfachere Variante ist sicher mit zwei replace Funktionen:
$string = preg_replace('/(^,)|(,$)/','',preg_replace('/[^\d%]+/', ',', $string ));sieht sehr gut aus ;-)
bleibt nur noch die Frage, ob man im regex aufeinander folgende Prozentzeichen durch eins ersetzen kann, oder ob man dafür ein weiteren regex braucht :)
https://forum.selfhtml.org/?t=147081&m=954472Sven
Das wäre ähnlich wie mit den Kommata am Anfang und Ende; es geht zwar theoretisch alles in einem RegExp, aber dadurch wird es sehr umständlich.
Ich würde hier auch wieder zu einem zweiten Replace tendieren.
mfg
Hi
$string = preg_replace('/[^\d%]+/', ',', $string)
muss ich um auf einander folgende %-Zeichen durch ein zu ersetzen´, folgendes machen?
$string = @preg_replace('~[^\d%]+~', ',', $string );
mir fällt im Moment keine Möglichkeit ein, wie ich dein Ausdruck erweitern müsste, dass ich den 2. Ausdruck weglassen könnte
Sven
Hi
$string = @preg_replace('~[^\d%]+~', ',', $string );
hab das falsche reinkopiert :(
$string = @preg_replace('~%+~', '%', $string );
Sven
Hi
Das Ganze sieht dann so aus:
$string = preg_replace('/\D/', ',', $string);
ich hätte wohl mal besser hinschauen sollen :-)
kann man folgenden Code noch optimieren?
$string = @preg_replace('/,+/', ',', @preg_replace('~\D~', ',', $string))
Sven