none
Zahlen aus einem String filtern RRS feed

  • Frage

  • Hallo zusammen,

    ich würde gerne die Telefonnummern die in der AD gespeichert sind in ein einheitliches Format bringen. Leider sind diese in unterschiedlichsten Formaten gespeichert. Eine Gemeinsamkeit besteht darin, dass die letzten 3 Ziffern immer die Durchwahl darstellen. Die Idee die ich hatte, ist den ausgelesenen String (get-aduser ... $_.TelephoneNumber) alle Ziffern zu filtern und die letzten drei Ziffern abzuschneiden.

    Bsp:

    "+49 (123) 123456 - 789   "

    "0123123456789"

    " 0049123123456.789"

     

    Die erste Idee die ich hatte, war mit Replace die Zeichen die keine Ziffen sind zu ersetzen. 

    ((("    +49 (123) 123456 - 789 ").replace(" ","")).replace("(","")).replace(")","")
    

    Ich finde es aber nicht sehr praktikabel, da neben den oben dargestellten Zeichen, weitere nicht ausgeschlossen sind. Gibt es vielleicht eine Möglichkeit nur die Zahlen eines Strings zu filtern? Damit wäre es vermutlich einfacher.

    Danke im Voraus für eure Mühen

    Sonntag, 25. September 2011 11:09

Antworten

  • Moin,

    ich würde gerne die Telefonnummern die in der AD gespeichert sind in ein einheitliches Format bringen. Leider sind diese in unterschiedlichsten Formaten gespeichert. Eine Gemeinsamkeit besteht darin, dass die letzten 3 Ziffern immer die Durchwahl darstellen. Die Idee die ich hatte, ist den ausgelesenen String (get-aduser ... $_.TelephoneNumber) alle Ziffern zu filtern und die letzten drei Ziffern abzuschneiden.

    Bsp:

    "+49 (123) 123456 - 789   "

    "0123123456789"
    " 0049123123456.789"

    das ist ein perferkte Fall für einen regluären Ausdruck:

    $alt = "+49 (123) 123456 - 789   "
    $alt = $alt -replace "[^\d]"
    $ext = $alt.Substring($a.Length-3,3)
    $nr = $alt.Substring($a.Length-3,3)

    Erklärung:

    [] steht für eine Zeichengruppe
    \d steht für Ziffern
    ^ nicht für eine negativ (aber nur in DIESER Kombination mit []!!)

    Anders ausgedrückt:

    [^\d] = Alle Zeichen, die keine Ziffern sind

    -replace entfernt die dann.

    Die beiden letzten Zeilen bringen Dir dann die allgemeine Rufnummer und die Durchwahl. Das könnte man auch mit einer RegEx machen, aber hier finde ich zwei einzelne Zeilen übersichtlicher (und vermutlich auch sind sie auch performanter).

    Was Dir noch fehlt, ist die Behandlung des Anfanges.

    Da könnte man z.B so was machen:

    $nr = $nr -replace "^0*"

    Erklärunzu "^0*":

    ^ = Zeilenanfang (da hier das ^ ohne [] steht!)
    0 = die Null
    * = eine beliebige Anzahl

    Anders ausgedrückt:
    "^0*" = eine beliebige Anzahl Nullen am Anfang des Begriffes

    Danach müsstest Du nur noch vergleichen, ob das mit "49" beginnt und dann entsprechen darauf reagieren.


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Sonntag, 25. September 2011 14:44

Alle Antworten

  • Moin,

    ich würde gerne die Telefonnummern die in der AD gespeichert sind in ein einheitliches Format bringen. Leider sind diese in unterschiedlichsten Formaten gespeichert. Eine Gemeinsamkeit besteht darin, dass die letzten 3 Ziffern immer die Durchwahl darstellen. Die Idee die ich hatte, ist den ausgelesenen String (get-aduser ... $_.TelephoneNumber) alle Ziffern zu filtern und die letzten drei Ziffern abzuschneiden.

    Bsp:

    "+49 (123) 123456 - 789   "

    "0123123456789"
    " 0049123123456.789"

    das ist ein perferkte Fall für einen regluären Ausdruck:

    $alt = "+49 (123) 123456 - 789   "
    $alt = $alt -replace "[^\d]"
    $ext = $alt.Substring($a.Length-3,3)
    $nr = $alt.Substring($a.Length-3,3)

    Erklärung:

    [] steht für eine Zeichengruppe
    \d steht für Ziffern
    ^ nicht für eine negativ (aber nur in DIESER Kombination mit []!!)

    Anders ausgedrückt:

    [^\d] = Alle Zeichen, die keine Ziffern sind

    -replace entfernt die dann.

    Die beiden letzten Zeilen bringen Dir dann die allgemeine Rufnummer und die Durchwahl. Das könnte man auch mit einer RegEx machen, aber hier finde ich zwei einzelne Zeilen übersichtlicher (und vermutlich auch sind sie auch performanter).

    Was Dir noch fehlt, ist die Behandlung des Anfanges.

    Da könnte man z.B so was machen:

    $nr = $nr -replace "^0*"

    Erklärunzu "^0*":

    ^ = Zeilenanfang (da hier das ^ ohne [] steht!)
    0 = die Null
    * = eine beliebige Anzahl

    Anders ausgedrückt:
    "^0*" = eine beliebige Anzahl Nullen am Anfang des Begriffes

    Danach müsstest Du nur noch vergleichen, ob das mit "49" beginnt und dann entsprechen darauf reagieren.


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Sonntag, 25. September 2011 14:44
  • Hallo,

    genau das war es, was ich gesucht habe. Vielen Dank!

    Sonntag, 25. September 2011 14:54