2017-03-08 1 views
0

I-Adresse abgerufen, die ich brauche einen Teil davon PHPeinige Zeichen zwischen den Zahlen entfernen

$address="testbuz<br> 
Test Test <br> 
Test 
1<br> 
2fdd aa, city<br> 
Belgium<br> 
T: 1234567890 
<br>BTW: BE-04-84-71-02-01"; 

ich nach BTW das Teil zu formatieren müssen mit zu formatieren wie BTW: BE014149111

Es kann andere Symbole wie Trennzeichen wie Leerzeichen Sterne Hash haben, also die Zahlen nach BE ohne Leerzeichen oder Symbol zeigen müssen

so die Ausgabe wie

$address="testbuz<br> 
Test Test <br> 
Test 
1<br> 
2fdd aa, city<br> 
Belgium<br> 
    T: 1234567890 
    <br>BTW: BE0414150211"; 

Jemand weiß, wie dies bitte mit PHP zu tun, ich Ihre Hilfe zu schätzen wissen.

Hinweis: -

es nicht nur Striche, kann es sein, variieren, und ich kann alle Adresse nicht ersetzen - Symbole, sollte es überprüfen und ersetzen, nachdem BTW: BE

Danke

+0

'str_replace ('-', '', $ string);' –

+0

es nicht nur Striche, kann es sein, variieren, und ich kann alle Adresse nicht ersetzen - Symbole, sollte es überprüfen und ersetzen nach BTW: BE –

Antwort

2

Verwendung preg_replace_callback:

$address="Horecaworld<br> 
Test Test <br> 
Test 
1<br> 
2911 EA, Rotterdam<br> 
Belgium<br> 
T: 1234567890 
<br>BTW: BE-04#64/91.02|11"; 

$result = preg_replace_callback('/^(.+BTW: BE)(.+)$/m', function ($m) { 
         return $m[1] . preg_replace('/\D/', '', $m[2]); 
        }, 
        $address); 
echo $result,"\n"; 

Ausgang:

Horecaworld<br> 
Test Test <br> 
Test 
1<br> 
2911 EA, Rotterdam<br> 
Belgium<br> 
T: 1234567890 
<br>BTW: BE0464910211 
+0

Ich bin mir nicht sicher, wie beantwortet das genau die Frage? Es würde einfach '
BTW:' aus der Zeichenfolge entfernen. – jeroen

+0

es funktioniert für - aber wenn ich mit dot ex - BE-04-64-91-02.11 überprüfen bleibt es dot –

+0

ich muss alles außer Zahlen nach BE-04-64-91-02.11 entfernen, Vielen Dank –

1

Dies kann Funktionen str_replace() und strstr() erreicht werden unter Verwendung. Versuchen Sie folgendes:

$prefix = strstr($address, 'BTW: ', true); // Contains string until BTW: appears 
$editable = strstr($address, 'BTW: '); // Contains string after BTW: appears 
$editable = str_replace('-','',$editable); // Replace all occurences of - 
$result = $prefix.$editable; // Final string 
+0

Danke für die Antwort, kann es ersetzen - aber ich kann nicht vermuten, dass es nur - Symbol, es kann sein., *, Leerzeichen, +, Buchstaben oder andere –

1

Mit preg_replace und \G basierten Muster:

$str = preg_replace('~(?:\G(?!\A)|BTW:\h*)[A-Z0-9]{2}\K[^A-Z0-9\r\n]~', '', $str); 

demo

Die \G Anker entspricht der Position nach dem vorherigen Spiel und Kräfte aufeinander folgenden Ergebnisse, die diesen Zweig verwenden, um zu sein zusammenhängend.
Die Funktion \K entfernt den Teilstring, der mit dem linken Teil des Musters übereinstimmt, aus dem Übereinstimmungsergebnis. Auf diese Weise wird nur das Zeichen entfernt, das mit [^A-Z0-9\r\n] übereinstimmt.

Beachten Sie, dass das Starten eines Musters mit einer Alternation nicht sehr effizient ist, da die Regex-Engine jede Verzweigung für jede Position in der Zeichenfolge testen muss, bis einer der Zweige erfolgreich ist.
Sie können diese Arbeit jedoch mit einem kleinen Trick drastisch reduzieren, um alle Teilstrings ohne B schnell zu überspringen, bis "BTW:".

~(?:\G(?!\A)|[^B]*(*SKIP)BTW:\h*)[A-Z0-9]{2}\K[^A-Z0-9\r\n]~ 

demo

+0

Danke für die Antwort –

Verwandte Themen