Hauptmenü

Hilfe zu RegEx

Begonnen von Frank_Huber, 19 Oktober 2016, 16:51:15

Vorheriges Thema - Nächstes Thema

Frank_Huber

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

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Frank_Huber

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. ;)

DeeSPe

#3
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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Frank_Huber

es geht ja nicht um FHEM. ist in nem IP Softphone.
hätte ich im Start-post bischen besser darlegen können, sorry.

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)