[php] preg_match Telefonnummer

Bububoomt

ohne Vertrauen
ID: 10361
L
28 April 2006
19.666
769
ich möchte mit Preg_match überprüfen ob die Telefonnummer in folgen
dem format sind:

+49-000-000000


Habe mit nem Prog folgendes geprüft:
^\+\d{2,3}-{1}\d{3,4}-{1}\d{5,}

das scheint so richtig zu sein. Zumindest klappte es in dem programm.

in php bekomme ich wenn ich das nutze:
PHP:
preg_match('^\+\d{2,3}-{1}\d{3,4}-{1}\d{5,}',$phone)

folgenden fehler:

No ending delimiter '^' found in

dachte ich müßte am ende noch ein ^ stehen haben, dann kommt aber:
Compilation failed: nothing to repeat at offset 0
 
Wo sind denn die Delimeter? ;)
Das heißt am Anfang und am Ende des Regulären Ausdrucks muss das gleiche Sonderzeichen sein. Außerdem darf es im Regulären Ausdruck dann nur verwendet werden, wenn es verwendet wird.
 
ähm ja, und wie muß ichs nun machen, also ^ weglassen geht auch nicht, wenn ichs ans ende setze auch nciht. Und wie gesagt im regex tool ging es so, da habe ich es getestet.
 
Ehm was machst du mit telefonummern die wie meine eine vorwahl mit +4936601 haben???die matcht der net mit den bindestrichen. Zumindest wenn ich das richtig gesehen habe.
 
{1} kannst du dir immer zu Gunsten der Übersichtlichkeit sparen. Ein Zeichen wird immer als einmal angenommen, wenn nix dahinter steht.
Code:
/\d{1}-{1}(foo){1}(a|b){1}/
ist äquivalent zu
Code:
/\d-foo(a|b)/
@strolch00:
Wenns ers nicht braucht... Die wenigsten Telefonnummern kommen heutzutage noch mit 6 Stellen aus. 7 sind in größeren Städten an der Tagesordnung und 8 gibt es auch schon.
 
Versuchs mal so ;)
PHP:
preg_match('~^\+\d{2,3}-{1}\d{3,4}-{1}\d{5,}~',$phone)

dann erhalte ich:
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 1


@strolch00
die zahl der vorwahl stellen muß ich noch angucken, wieviel da erlaubt sind.
Habe nur ne vorgabe von
+49-000-000000
Die Daten werden an eine Schnittstelle gesendet, und da habe ich bisher keiner vorgaben.
 
Normalerweise ist da nichts falsch.
Auch mein Programm sagt nicht, dass es dort einen Fehler gibt.

Aber änder doch einfach mal das so um, wie tH es gesagt hat ;)
Die {1} sind wirklich nur verwirrend, besonders wenn die Ausdrücke später noch länger werden sollten:

PHP:
preg_match('~^\+\d{2,3}-\d{3,4}-\d{5,}~',$phone)
 
am pregmatch liegts nciht, habs in ner extra datei getestet, liegt an was anderem.
Danke schon mal allen.
 
dann erhalte ich:
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 1
Diese Meldung kriegst du, wenn du das Pluszeichen nicht escapst.

Dann nimmt der Parser es als {1,} und wendet es auf das vorherige Zeichen an, welches ^, das Symbol für den Anfang, ist. Das kann man natürlich nicht wiederholen, also "nothing to repeat". ^ ist das erste Zeichen (Delimiter zählt hier nicht) im RegExp, also "at offset 1".

Im geposten Code ist der Backslash vor dem Pluszeichen aber da, das muss funktionieren!
 
Kann sein, dass ich mich grad vertue, aber evtl musst Du das Escape-Zeichen selbst noch escapen, sprich: '^\\+[...]'.
 
Kann sein, dass ich mich grad vertue, aber evtl musst Du das Escape-Zeichen selbst noch escapen, sprich: '^\\+[...]'.
Nur, wenn du "..." benutzt. Verwendest du '...' (was ich bei RegExps immer empfehle), darfst du nicht doppelt escapen. Der Parser würde es sonst als "jetzt muss im Suchstring ein Backslash kommen" werten.