FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Frank_Huber am 19 Oktober 2016, 16:51:15

Titel: Hilfe zu RegEx
Beitrag von: Frank_Huber am 19 Oktober 2016, 16:51:15
Hi,

Es gehört zwar nicht zwingend zu FHEM, aber ich denke hier gibt es dennoch Wissende und die Antwort könnte auch für andere interessant sein.

Ich muss über RegEx Telefonnummern anpassen. aus "0" muss "+49" werden und aus "00" "+"
der erste Teil geht mit ^0 zu +49, ich bekomme aber den zweiten Ausdruck nicht hin.
Stand jetzt macht er mir z.B. aus 0041 (Schweiz) ein +49041 was ja mit obiger Regel auch richtig ist.

jemand ne Idee?

Danke & Grüße
Frank
Titel: Antw:Hilfe zu RegEx
Beitrag von: DeeSPe am 19 Oktober 2016, 17:02:28
Ich würde erst die doppelten Nullen am Anfang mit + ersetzen.
Danach nochmal die einzelnen Nullen am Anfang durch +49 ersetzen.

Etwa so:

00 zu +:
s/^00/\+/

0 zu +49:
s/^0/\+49/

Ungetestet!!!

Gruß
Dan
Titel: Antw:Hilfe zu RegEx
Beitrag von: Frank_Huber am 19 Oktober 2016, 17:24:02
danke Dan,
das ist es ja grad, ich hab nur ein Feld für "suchen" und eins für "ersetzen", muss also in einem rutsch gehen.

Wobei ich fast denke dass das gar nicht zu machen ist in dem Fall.

Auch möglich wäre es einfach alle führenden Nullen zu entfernen. also einzelne oder doppelte Null.

So, während dem schreiben hier die Lösung gefunden.

^0{1,2} ersetzen mit *
d.h. eine oder zwei Nullen am Anfang mit * ersetzen.

gelöst. danke fürs zuhören. ;)
Titel: Antw:Hilfe zu RegEx
Beitrag von: DeeSPe am 19 Oktober 2016, 17:34:49
Zitat von: Frank_Huber am 19 Oktober 2016, 17:24:02
das ist es ja grad, ich hab nur ein Feld für "suchen" und eins für "ersetzen", muss also in einem rutsch gehen.

Was meinst Du damit?

Man kann doch einen String in Perl mehrfach substituieren.
Wenn Du die nachfolgende Sub mit Telefonnummer(n) fütterst, dann solltest Du das richtige Ergebnis zurück bekommen

sub replaceRufnummer($)
{
  my $string = @_;
  $string =~ s/^00/\+/g;
  $string =~ s/^0/\+49/g;
  return $string;
}


Gruß
Dan
Titel: Antw:Hilfe zu RegEx
Beitrag von: Frank_Huber am 19 Oktober 2016, 18:52:05
es geht ja nicht um FHEM. ist in nem IP Softphone.
hätte ich im Start-post bischen besser darlegen können, sorry.
Titel: Antw:Hilfe zu RegEx
Beitrag von: Markus Bloch am 19 Oktober 2016, 21:22:42
Hallo zusammen,

in FB_CALLMONITOR hatte ich genau das gleiche Problem, da ich Rufnummern in unterschiedlichsten Formaten in ein einheitliches Format bekommen muss. Hier habe ich es so gelöst:

#####################################
# normalizes a formated phone number
sub FB_CALLMONITOR_normalizePhoneNumber($$)
{
    my ($hash, $number) = @_;
    my $name = $hash->{NAME};
   
    my $area_code = AttrVal($name, "local-area-code", "");
    my $country_code = AttrVal($name, "country-code", "0049");
   
    $number =~ s/\s//g;                         # Remove spaces
    $number =~ s/^(\#[0-9]{1,10}\#)//g;         # Remove phone control codes
    $number =~ s/^\+/00/g;                      # Convert leading + to 00 country extension
    $number =~ s/\D//g if(not $number =~ /@/);  # Remove anything else isn't a number if it is no VoIP number
    $number =~ s/^$country_code/0/g;            # Replace own country code with leading 0

    if(not $number =~ /^0/ and not $number =~ /@/ and $area_code =~ /^0[1-9]\d+$/)
    {
       $number = $area_code.$number;
    }
   
    return $number;
}


Gruß
Markus