Wie kann ich meine Nummer in einer einfachen Variablen und nicht in Array erhalten?
Bizboss
34
$ var = implode ('', $ entspricht [0]);
Gaurav
2
@Bizboss In ähnlicher Weise versuchen Sie es $newstr = preg_replace('!\d+!', '', $str);. Es werden alle Ziffern aus Ihrer Zeichenfolge entfernt. Beispiel: $str = 'In My Cart : 11 12 items';wird ausgegeben In My Cart : items.
Äther
77
Dies ist kein ressourcenschonender Weg. benutze preg_replace("/[^0-9]/","",$string);oderfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
eapo
6
@eapo filter_var($str, FILTER_SANITIZE_NUMBER_INT);extrahierte Ziffern, Plus- und Minuszeichen . Der Regex extrahierte nur Ziffern!
PATROMO
535
Wenn Sie nur alles andere als die Zahlen herausfiltern möchten, verwenden Sie am einfachsten filter_var :
Ein Bindestrich vor einer Zahl wird als Minus behandelt.
Elnur Abdurrakhimov
43
Nicht nur vor der Nummer. Alle +/- werden nicht abgeschnitten. Wenn Sie haben, werden xxx-yyy-24Sie bekommen --24. Sie können str_repleace(array('+','-'), '', $result)beide Zeichen löschen.
imclickingmaniac
4
@imclickingmaniac können Sie max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))stattdessen einfach Arrays und String-Ersetzungen verwenden.
Eduard
2
Wenn Sie max () verwenden, wird auch das Minuszeichen in den Zeichenfolgen zurückgegeben. Hier ist hoffentlich strreplace () die Option. Danke für die Tipps.
Ich mag das, weil es einen String zurückgibt, kein Array wie die Beispiele mit preg_match_all, und ich mag es, weil ich nur Zahlen will, kein Pluszeichen oder Bindestrich, wie es das Beispiel filter_var tut.
Darrell Duane
43
Seien Sie vorsichtig mit dieser Methode: so etwas wie 'In My Car_Price: 500.00wird gedruckt:50000
ErickBest
16
@ErickBest Das ist eine gute Sache, wenn man bedenkt, dass die Frage war extract the numbers from a string- ein Dezimalpunkt ist keine Zahl!
Rybo111
1
Dies ist ein Trottel, aber Sie möchten wahrscheinlich einfache Anführungszeichen 'und keine doppelten Anführungszeichen verwenden ".
CommandZ
16
preg_replace ('/ [^ 0-9.] /', '', 'abc1.22'); // gibt Dezimalzahl 1,22 zurück
Es ist eigentlich falsch :) Es sollte sein'!\d*.?\d+!'
Yash
Ich würde es vorziehen, ?als Quantifizierer des wörtlichen Punktes zu verwenden. Ich würde nicht erwarten, dass ein Gleitkommawert mehrere Dezimalpunktsymbole enthält. Yashs kommentiertes Muster ist ironischerweise falsch . Der Punkt benötigt einen Schrägstrich, um ihn wörtlich zu machen.
Mickmackusa
11
Ich besitze das Guthaben dafür nicht, aber ich muss es nur teilen. Dieser reguläre Ausdruck erhält Zahlen aus einer Zeichenfolge, einschließlich Dezimalstellen / Stellen sowie Kommas:
Dies überprüft die Zeichenfolge nicht für ein Komma zwischen Sätzen von drei ganzen Zahlen. ... das Problem, das Muster eines anderen zu kopieren und nicht zu verstehen / zu testen.
Das Schreiben \dinnerhalb einer Zeichenklasse hat keinen Vorteil . Da Sie auf das Fullstring-Match zugreifen, macht es keinen Sinn, eine Erfassungsgruppe in das Muster zu schreiben.
Das erste implodierende Argument in diesem speziellen Fall lautet "Trenne jedes Element in Übereinstimmungen [0] mit einem einzelnen Leerzeichen." Implode setzt kein Leerzeichen (oder was auch immer Ihr erstes Argument ist) vor die erste Zahl oder nach die letzte Zahl.
Zu beachten ist außerdem, dass in $ match [0] das gefundene Array von Übereinstimmungen (die mit diesem regulären Ausdruck übereinstimmen) gespeichert wird.
$string ='In My Car_Price : 50660.00';
echo intval(preg_replace('/[^0-9.]/','',$string));# without number format output: 50660
echo number_format(intval(preg_replace('/[^0-9.]/','',$string)));# with number format output :50,660
Dieses Skript erstellt zunächst eine Datei, schreibt Zahlen in eine Zeile und wechselt in eine nächste Zeile, wenn ein anderes Zeichen als die Zahl angezeigt wird. Zum Schluss werden die Zahlen wieder zu einer Liste sortiert.
string1 ="hello my name 12 is after 198765436281094and14 and 124de"
f= open("created_file.txt","w+")for a in string1:if a in['1','2','3','4','5','6','7','8','9','0']:
f.write(a)else:
f.write("\n"+a+"\n")
f.close()#desired_numbers=[x for x in open("created_file.txt")]#print(desired_numbers)
k=open("created_file.txt","r")
desired_numbers=[]for x in k:
l=x.rstrip()print(len(l))if len(l)==15:
desired_numbers.append(l)#desired_numbers=[x for x in k if len(x)==16]print(desired_numbers)
Das Einfügen von Bindestrichen in diesen Prozess ist völlig unnötig. Dieser Antwort fehlt auch eine Erklärung, wie es funktioniert und warum Sie es für eine gute Idee halten.
Antworten:
quelle
$newstr = preg_replace('!\d+!', '', $str);
. Es werden alle Ziffern aus Ihrer Zeichenfolge entfernt. Beispiel:$str = 'In My Cart : 11 12 items';
wird ausgegebenIn My Cart : items
.preg_replace("/[^0-9]/","",$string);
oderfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
filter_var($str, FILTER_SANITIZE_NUMBER_INT);
extrahierte Ziffern, Plus- und Minuszeichen . Der Regex extrahierte nur Ziffern!Wenn Sie nur alles andere als die Zahlen herausfiltern möchten, verwenden Sie am einfachsten filter_var :
quelle
xxx-yyy-24
Sie bekommen--24
. Sie könnenstr_repleace(array('+','-'), '', $result)
beide Zeichen löschen.max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))
stattdessen einfach Arrays und String-Ersetzungen verwenden.abs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
Das sollte besser machen! ...
quelle
500.00
wird gedruckt:50000
extract the numbers from a string
- ein Dezimalpunkt ist keine Zahl!'
und keine doppelten Anführungszeichen verwenden"
.Verwenden von
preg_replace
:Ausgabe: 1111111111
quelle
+387 (61) 634-783
String in38761634783
direkt. Sie müssen sich nicht um Arrays wie Gauravs Antwort kümmern.+
Quantifizierer für längere Übereinstimmungen / weniger Ersetzungen.Für schwebende Zahlen
Vielen Dank, dass Sie auf den Fehler hingewiesen haben. @ Mickmackusa
quelle
'!\d*.?\d+!'
?
als Quantifizierer des wörtlichen Punktes zu verwenden. Ich würde nicht erwarten, dass ein Gleitkommawert mehrere Dezimalpunktsymbole enthält. Yashs kommentiertes Muster ist ironischerweise falsch . Der Punkt benötigt einen Schrägstrich, um ihn wörtlich zu machen.Ich besitze das Guthaben dafür nicht, aber ich muss es nur teilen. Dieser reguläre Ausdruck erhält Zahlen aus einer Zeichenfolge, einschließlich Dezimalstellen / Stellen sowie Kommas:
/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/
Zitiert von hier:
php - regex - wie extrahiere ich eine Zahl mit Dezimalstelle (Punkt und Komma) aus einer Zeichenfolge (z. B. 1.120,01)?
quelle
Sie können preg_match verwenden :
quelle
echo '<p>'.$m[0].'</p>';
Verwenden von preg_replace
quelle
+
Quantifizierer für längere Übereinstimmungen / weniger Ersetzungen.Sie können folgende Funktion verwenden:
quelle
\d
innerhalb einer Zeichenklasse hat keinen Vorteil . Da Sie auf das Fullstring-Match zugreifen, macht es keinen Sinn, eine Erfassungsgruppe in das Muster zu schreiben.Das erste implodierende Argument in diesem speziellen Fall lautet "Trenne jedes Element in Übereinstimmungen [0] mit einem einzelnen Leerzeichen." Implode setzt kein Leerzeichen (oder was auch immer Ihr erstes Argument ist) vor die erste Zahl oder nach die letzte Zahl.
Zu beachten ist außerdem, dass in $ match [0] das gefundene Array von Übereinstimmungen (die mit diesem regulären Ausdruck übereinstimmen) gespeichert wird.
Weitere Erläuterungen zu den anderen Indizes im Array finden Sie unter: http://php.net/manual/en/function.preg-match-all.php
quelle
Versuchen Sie dies, verwenden Sie preg_replace
DEMO
quelle
[^0-9]
ist einfacher geschrieben als\D
.Oder
Oder
Dies gibt nur den numerischen Wert zurück
quelle
wir können int daraus wie extrahieren
Demo: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398
quelle
Befolgen Sie diesen Schritt, um die Zeichenfolge in eine Zahl umzuwandeln
Ein anderer Weg, es zu tun:
quelle
anders (gerade Unicode-Zeichenfolge):
quelle
Dieses Skript erstellt zunächst eine Datei, schreibt Zahlen in eine Zeile und wechselt in eine nächste Zeile, wenn ein anderes Zeichen als die Zahl angezeigt wird. Zum Schluss werden die Zahlen wieder zu einer Liste sortiert.
quelle
Abhängig von Ihrem Anwendungsfall kann dies auch eine Option sein:
Obwohl ich einer Regex zustimmen
filter_var()
würde oder im angegebenen Fall nützlicher wäre.quelle
für utf8 str:
quelle
quelle
Diese Funktionen verarbeiten auch die schwebenden Zahlen
quelle