2016-07-15 3 views
-2

Ich habe Strings, wo leide Telefonnummer und E-Mail wie folgt verkettet:Regex zu trennen verketteten Telefonnummer und E-Mail

$phone_email = "[email protected]";

Ich mag würde in der Lage sein zwischen der letzten Reihe und ersten Buchstaben aufteilen .

Wunsch Ausgang

$phone = "617.651.3123"; 
$email = "[email protected]"; 

Ich bin mit PHP, aber hoffentlich die Strategie würde in jeder Sprache einfach sein.

EDIT

Ich habe einschließlich versucht, viele Dinge ausprobiert, einfach indem man die Ziffern die E-Mail greifen. $email = preg_replace('#^\d+#', '', $phone_email);, dass nur Ergebnisse der 617 bei der Entfernung der .

+1

uns zeigen, was Sie haben versucht, und was didn‘ t arbeiten. Dann haben wir etwas zu beginnen. Bitte beschreiben Sie auch die Regeln in Englisch, die Sie in einem regulären Ausdruck implementieren möchten. Woher weißt du, was die Telefonnummer ist und was ist E-Mail? –

+0

@anubhava: Das wird gebrochen, wenn die E-Mail-Adresse mit einer Nummer beginnt. –

+0

@AndyLester Ich habe viele Dinge ausprobiert, einschließlich versuchen, einfach die E-Mail zu greifen, indem Sie die Ziffern entfernen. '$ email = preg_replace ('#^\ d + #', '', $ phone_email);' Dies führt dazu, dass nur die '617' entfernt werden, die' .' ignorieren. –

Antwort

1

Wie andere haben darauf hingewiesen, Spaltung zwischen „der letzten Nummer und Anfangsbuchstabe“ kann nicht eine gute Strategie sein, da E-Mail-Adressen mit Zahlen beginnen. Das heißt, ich glaube, das macht ungefähr das, was Sie gefragt:

$phone_email = "[email protected]"; 

$matches = []; 
preg_match("/([^a-zA-Z]*)(.*)/", $phone_email, $matches); 

$phone = $matches[1]; 
$email = $matches[2]; 

echo "Phone: $phone\n"; 
echo "Email: $email\n"; 

// Output: 
// Phone: 617.651.3123 
// Email: [email protected] 
+0

Dank, wie wäre es zu fangen, wo die '$ phone_email' die Nummer Telefon fehlt? –

+0

Kann es einige Haken für die '@' sein? –

+1

Siehe meine Bearbeitung. Verwenden Sie ein '*' anstelle von '+' in der ersten Aufnahme. – smarx

1

Einfache Lösung zu ignorieren ist:

$phone_email = "[email protected]"; 
$ms = array(); 
preg_match("/(.*\d)([a-z].*)/", $phone_email, $ms); 
print_r($ms); 

Natürlich Fällen, wenn E-Mail mit einer Zahl beginnt, werden nicht berücksichtigt.

+0

Ich glaube nicht, dass das sogar mit dem Input funktioniert, mit dem du getestet hast, oder? – smarx

+0

Entschuldigung! Ich habe es falsch gelesen. – smarx

+0

Mein einziger würde verbleibenden Vorschlag als auch Großbuchstaben zu handhaben sein, obwohl ich die ursprüngliche Frage zugeben sehr underspecified ist. – smarx

1

Split nach Ziffern und Punkte Wiederholungen

print_r(preg_split('/(\d+\.?)+\K/', $phone_email,2)); 

demo

+1

Ausgang: 'Array ( [0] => 617. [1] => [email protected] )' – smarx

+1

ich die Antwort aktualisiert haben – splash58

Verwandte Themen