Benutzer mit den meisten Antworten
Zahlen aus einem String filtern

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
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 AnzahlAnders ausgedrückt:
"^0*" = eine beliebige Anzahl Nullen am Anfang des BegriffesDanach 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- Als Antwort markiert Alexander Kellmann Sonntag, 25. September 2011 14:53
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 AnzahlAnders ausgedrückt:
"^0*" = eine beliebige Anzahl Nullen am Anfang des BegriffesDanach 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- Als Antwort markiert Alexander Kellmann Sonntag, 25. September 2011 14:53