Alle Telefonnummern in einem String finden

slimox

Mitglied
Hallo,

Ich komme nicht weiter, ich habe einen String:
PHP:
$nummer =  'Meine nummer +49 123 45 67 89 und +41 123456789 das ist 0049 123 456789 ein test 0123 456 789';

Nun sollte die Funktion preg_match_all alle Telefonnummern die es findet raussuchen:
  1. +49 123 45 67 89
  2. +41 123456789
  3. 0049 123 456789
  4. 0123 456 789

Das habe ich bereits:
PHP:
	$nummer =  'Meine nummer +49 123 45 67 89 und +41 123456789 das ist 0049 123 456789 ein test 0123 456 789';
	
	preg_match_all("/^(?:0{2}|\+)[0-9]{2,3} [1-9][0-9]* [0-9]+$/",
										 $nummern,
										 $raus3, 
										 PREG_PATTERN_ORDER);
	
	echo '<pre>';
		var_dump($raus3);
	echo '</pre>';

Und das ist was raus kommt:
PHP:
array(1) {
  [0]=>
  array(0) {
  }
}

Was ist falsch? ?:rolleyes:
 
Das Caret-Zeichen am Anfang ist fehl am Platze und Dollar am Ende hab ich auch mal weggenommen, danach findet es zwei Nummern.. Du kannst Deine Nummern-RegExp doch nicht mit Anfang und Ende des Strings beschränken?! unsinnig..

Hier kannst Du spielen.
http://regexp-tester.mediacix.de/exp/regex/

mfg chmee

p.s.: Wobei ich die RegExp auf das Nötigste kürzen würde ohne Leerzeichenvorgaben zu machen. Am Anfang + oder 00, danach egal wieviele Zahlen in Kombination mit 1 Leerzeichen.
Code:
([0]{2}|\+)([0-9]+|[ ]{1})+
 
Zuletzt bearbeitet:
Ok, da hast du recht!

Bei mir gibt es diesen Error aus:

PHP:
	preg_match_all("([0]{2}|\+)([0-9]+|[ ]{1})+",
										 $nummern,
										 $raus3, 
										 PREG_PATTERN_ORDER);

HTML:
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '(' in ../test.php on line 8

:(
 
Du musst auch die Delimiter davor und dahinter setzen.. In Deinem obigen Beispiel waren es Slashes /..

mfg chmee
 
Super der / hat noch gefehlt ;)

PHP:
	$string = "Meine nummer +49 123 45 67 89 und +41 123456789 das ist 0049 123 456789 ein test 0123 456 789"; 
	
	// neuer Regex mit preg_quote() maskiert 
	$regex = "/([0]{2}|\+|0{1})([0-9]+|[ ]{1})+/"; 
	preg_match_all ($regex, $string, $output); 

	
	echo '<pre>';
		var_dump($output);
	echo '</pre>';

und die Ausgabe alle 4 Nummern:
Code:
array(4) {
    [0]=>
    string(17) "+49 123 45 67 89 "
    [1]=>
    string(14) "+41 123456789 "
    [2]=>
    string(16) "0049 123 456789 "
    [3]=>
    string(12) "0123 456 789"
  }

DANKE!!:p
 
Wobei ich jetzt überrascht bin, warum der letzte Eintrag gefunden wird, weil er weder ein + noch zwei Nullen am Anfang hat. In meinem Test mit dem oben verlinkten Regex-Tester blieb dies auch weg..

Achso, Du hast noch 0{1} hinzugefügt.. Wenn Du das unbedingt haben willst kannst Du auch den ersten Teil umschreiben in [0]{1,2}

Letztlich, dann kannst Du auch das ganze Konstrukt vereinfachen:
Code:
[0+]{1}([0-9]|[ ]{1})+
Das findet dann jede Zahl, die mit 0 oder + anfängt und dann beliebig mit Zahlen und Leerzeichen bestückt ist..

mfg chmee
 
Zuletzt bearbeitet:
Zurück