regexp für Telefonnummerumwandlung
regexp für Telefonnummerumwandlung
am 15.03.2006 15:20:13 von Marten Lehmann
Hallo,
ich möchte eine Telefonnummer vom Format +49-123-456-789-012 umwandeln
in +49-123-45678912. Die Telefonnummern haben mindestens zwei
Bindestriche für Länder- und Ortskennung. Alle optionalen Bindestriche
in der eigentlichen Rufnummer sollen aber entfernt werden. Im
Zweifelsfall würde ich einfach ein split mit max. 3 Elementen machen,
beim letzten Element die Bindestriche entfernen und dann wieder
zusammensetzen. Wäre das auch als regulärer Ausdruck machbar?
Tschüß
Marten
Re: regexp für Telefonnummerumwandlung
am 15.03.2006 15:27:11 von Marten Lehmann
Hi,
ich hatte das gerade noch als Einzeiler probiert:
$phone = "+49-123-456-789-012";
$phone = join(" ", (split("-", $phone, 3))[0, 1], (((split("-", $phone,
3))[2]) =~ s/-//g));
erhalte dann aber
Can't modify list slice in substitution (s///) at ./test.pl line 9, near
"s/-//g)"
Gibt es eine Möglichkeit den regulären Ausdruck on-the-fly anzuwenden
oder muß ich immer eine temporäre Variable erzeugen? Sind die regulären
Ausdrücke überhaupt als Funktion nutzbar (so wie in PHP mit
preg_replace) oder immer nur über den =~ Operator?
Tschüß
Marten
Re: regexp fürTelefonnummerumwandlung
am 15.03.2006 16:28:17 von Lukas Mai
Marten Lehmann schrob:
> Hallo,
>
> ich möchte eine Telefonnummer vom Format +49-123-456-789-012 umwandeln
> in +49-123-45678912. Die Telefonnummern haben mindestens zwei
> Bindestriche für Länder- und Ortskennung. Alle optionalen Bindestriche
> in der eigentlichen Rufnummer sollen aber entfernt werden. Im
> Zweifelsfall würde ich einfach ein split mit max. 3 Elementen machen,
> beim letzten Element die Bindestriche entfernen und dann wieder
> zusammensetzen. Wäre das auch als regulärer Ausdruck machbar?
Im Prinzip ja.
1 while $t =~ s/^((?:[^-]*-){2}[^-]*)-/$1/;
$t =~ s{^((?:[^-]*-){2})(.*)}{
my $s = $2;
$s =~ tr/-//d;
$1 . $s
}se;
if ($t =~ /^(?:[^-]*-){2}/) {
substr($t, $+[0]) =~ tr/-//d;
}
So richtig schön sind die aber alle nicht.
HTH, Lukas
Re: regexp für Telefonnummerumwandlung
am 15.03.2006 16:48:22 von Wolf Behrenhoff
Marten Lehmann schrieb:
> Hallo,
>
> ich möchte eine Telefonnummer vom Format +49-123-456-789-012 umwandeln
> in +49-123-45678912. Die Telefonnummern haben mindestens zwei
> Bindestriche für Länder- und Ortskennung. Alle optionalen Bindestriche
> in der eigentlichen Rufnummer sollen aber entfernt werden. Im
> Zweifelsfall würde ich einfach ein split mit max. 3 Elementen machen,
> beim letzten Element die Bindestriche entfernen und dann wieder
> zusammensetzen. Wäre das auch als regulärer Ausdruck machbar?
Ich schlage vor:
$_='+49-123-456-789-012';
1 while s/(-.*-.*)-/$1/;
print;
Wolf
Re: regexp für Telefonnummerumwandlung
am 16.03.2006 10:28:07 von Christian Winter
Marten Lehmann schrieb:
> ich möchte eine Telefonnummer vom Format +49-123-456-789-012 umwandeln
> in +49-123-45678912. Die Telefonnummern haben mindestens zwei
> Bindestriche für Länder- und Ortskennung. Alle optionalen Bindestriche
> in der eigentlichen Rufnummer sollen aber entfernt werden. Im
> Zweifelsfall würde ich einfach ein split mit max. 3 Elementen machen,
> beim letzten Element die Bindestriche entfernen und dann wieder
> zusammensetzen. Wäre das auch als regulärer Ausdruck machbar?
my $c = 0;
s/-/$c++<2?$&:''/eg;
-Christian
Re: regexp für Telefonnummerumwandlung
am 16.03.2006 13:41:03 von Frank Seitz
Christian Winter wrote:
> my $c = 0;
> s/-/$c++<2?$&:''/eg;
Hey, die Lösung gefällt mir!
Schade, dass man die Matches selber mitzählen muss und Perl
keine vordefinierte Variable dafür hat.
Oder kennt jemand sowas?
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: regexp für Telefonnummerumwandlung
am 16.03.2006 16:48:43 von timwi
Marten Lehmann wrote:
> Hallo,
>
> ich möchte eine Telefonnummer vom Format +49-123-456-789-012 umwandeln
> in +49-123-45678912. Die Telefonnummern haben mindestens zwei
> Bindestriche für Länder- und Ortskennung. Alle optionalen Bindestriche
> in der eigentlichen Rufnummer sollen aber entfernt werden. Im
> Zweifelsfall würde ich einfach ein split mit max. 3 Elementen machen,
> beim letzten Element die Bindestriche entfernen und dann wieder
> zusammensetzen. Wäre das auch als regulärer Ausdruck machbar?
Hast du dich auch mit den Telefonnummernregeln aller Länder beschäftigt?
Soweit ich informiert bin, muss z.B. in Italien die 0 bei der
Ortsvorwahl erhalten bleiben, selbst wenn der Ländercode +39 davorsteht.
In Nordamerika hingegen gilt der völlig chaotische, unübersichtliche und
schlecht durchdachte North American Numbering Plan (NANP), viel Spaß damit!
Timwi