Entfernen Sie nicht numerische Zeichen (außer Punkte und Kommas) aus einer Zeichenfolge


150

Wenn ich folgende Werte habe:

 $var1 = AR3,373.31

 $var2 = 12.322,11T

Wie kann ich eine neue Variable erstellen und sie auf eine Kopie der Daten setzen, bei der nicht numerische Zeichen mit Ausnahme von Kommas und Punkten entfernt wurden? Die obigen Werte würden die folgenden Ergebnisse zurückgeben:

 $var1_copy = 3,373.31

 $var2_copy = 12.322,11

Antworten:


335

Mit preg_replace können Sie alle nicht numerischen Zeichen sowie Komma und Punkt / Punkt wie folgt austauschen:

<?php
    $testString = '12.322,11T';
    echo preg_replace('/[^0-9,.]/', '', $testString);
?>

6
siehe auch PHP-Funktion money_function () ( php.net/manual/en/function.money-format.php )
Horatio

5
[^ 0-9] stimmt mit jedem nicht numerischen Zeichen überein, daher müssen Komma und Punkt nicht hinzugefügt werden. Dies ist ausreichend: echo preg_replace ('/ [^ 0-9] /', '', $ testString);
Billrichards

6
@ Billrichards Ich denke nicht, dass das richtig ist. Denken Sie daran, dass er das Komma und den Punkt zusammen mit den numerischen Zeichen beibehalten und nicht entfernen möchte.
Richt222

1
@billrichards Wie im OP angegeben (Hervorhebung von mir), "vermeiden Sie Alphabete oder Zeichen außer Komma und Punkt ".
John Parker

Braucht diese Zeit keinen Backslash? Punkt bedeutet "irgendein Charakter", nicht wahr?
Scott

66

Ich bin überrascht, dass filter_var hier nicht erwähnt wurde, da dies eine so alte Frage ist ...

PHP verfügt über eine integrierte Methode zur Verwendung von Desinfektionsfiltern . Insbesondere wird in dieser Situation FILTER_SANITIZE_NUMBER_FLOATdie FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSANDFlags verwendet. Wie so:

$numeric_filtered = filter_var("AR3,373.31", FILTER_SANITIZE_NUMBER_FLOAT,
    FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
echo $numeric_filtered; // Will print "3,373.31"

Es könnte auch erwähnenswert sein, dass es, da es in PHP integriert ist, etwas schneller ist als die Verwendung von Regex mit den aktuellen PHP-Bibliotheken (wenn auch buchstäblich in Nanosekunden).


2
IMO das ist die beste Antwort.
Ogier Schelvis


4

Sie können filter_varalle unzulässigen Zeichen außer Ziffern, Punkten und Kommas entfernen.

  • Der FILTER_SANITIZE_NUMBER_FLOATFilter wird verwendet, um alle nicht numerischen Zeichen aus der Zeichenfolge zu entfernen.
  • FILTER_FLAG_ALLOW_FRACTION erlaubt Fraktionstrenner " . "
  • Der Zweck FILTER_FLAG_ALLOW_THOUSAND, Komma aus der Zeichenfolge zu erhalten.

Code

$var1 = '12.322,11T';

echo filter_var($var1, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);

Ausgabe

12.322,11

Weitere Informationen zu filter_var () und Sanitize-Filtern


2

Wenn die Anforderung darin besteht, alle (und nicht nur ein) nicht numerischen Zeichen zu entfernen, kann das vorherige möglicherweise auf sehr einfache Weise so geschrieben werden (Sie können jedoch eine Funktion schreiben, um die Zeichenfolge zu übergeben und den erforderlichen Wert ohne Zeichen zurückzugeben .. wie auch immer..):

<?php
$String1 = 'AR3,373.31';
$String2 = '12.322,11T';

echo preg_replace('/[^0-9,.]+/i', '', $String1);
echo preg_replace('/[^0-9,.]+/i', '', $String2);
?>

1

Wenn Buchstaben immer am Anfang oder am Ende stehen, können Sie einfach nur Trimmen verwenden ... kein regulärer Ausdruck erforderlich

$string = trim($string, "a..zA..Z"); // this also take care of lowercase

"AR3,373.31" --> "3,373.31"
"12.322,11T" --> "12.322,11"
"12.322,11"  --> "12.322,11"

Wichtig: Dadurch werden nur Buchstaben aus der Zeichenfolge entfernt. Andere Zeichen wie Leerzeichen, Klammern, Anführungszeichen usw. bleiben im Ergebnis erhalten. -> Verwenden Sie diese Lösung nur, wenn Sie wissen, dass Ihre Eingabezeichenfolge nur Buchstaben und Zahlen und keine anderen Zeichen enthält!
Philipp

-1

Gleiche Antwort wie Middaparka, aber entfernen Sie die,.

$unformatted_phone = "phone 122-3222223.ext 442";
echo preg_replace("/[^0-9]/", "", $unformatted_phone);

Bitte fügen Sie die Links zu Ihrem Blog / Ihrer Website in den Posts nicht hinzu. Das könnte als Spam angesehen werden.
Tushar

Downvote: Weil Middaparkas Antwort perfekt war. Das OP möchte Punkte und Kommas behalten, aber Ihre Antwort entfernt sie.
Carlos2W
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.