Steiner Daniel Posted August 10, 2022 #1 Share Posted August 10, 2022 Hallo, ich muss bei einem CallRouting eine Texdatei (Export aus Kundenverwaltung) nach der Anrufernummer durchsuchen - bis dahin kein Problem Mein Problem ist, dass die Nummern ganz unterschiedlich formattiert sind, zB "+39 xxxx xxxxxx", "0039 (xxxx) xxxxxx", "xxxxxxxxxx", oder auch kombinationen aus dem Ganzen.... In VB.Net hab ich schon mal mit RexEx.Replace sowas gemacht, um alles, was nicht Nummer ist, zu entfernen: '+ durch 00 ersetzen Dim Ret As String = Regex.Replace(Number, "^\+", "00") ' alle Sonderzeichen (whsp, (, ...) entfernen Ret = Regex.Replace(Ret, "[^\d]", "") ' Am Anfang 00 durch + ersetzen Ret = Regex.Replace(Ret, "^00", "+") Aber irgendwie kriege ich das im Script in ECR nicht zum laufen. Funktionieren RegEx überhaupt im ECR? Danke Daniel Link to comment Share on other sites More sharing options...
Solution Tom Wellige Posted August 10, 2022 Solution #2 Share Posted August 10, 2022 Das Call Routing der SwyxWare basiert komplett auf VBScript und die Standard Windows Scripting Engine wird zur Ausführung verwendet. D.h. alles was Du in VBScript machen kannst, kannst Du auch im Call Routing machen. Eine fixe Suche nach "vbscript regexp" bringt Dir etliche Treffer die Dir zeigen, wie reguläre Ausdrücke in VBScript funktionieren, u.a. https://www.tutorialspoint.com/vbscript/vbscript_reg_expressions.htm Link to comment Share on other sites More sharing options...
Steiner Daniel Posted August 11, 2022 Author #3 Share Posted August 11, 2022 Danke Tom, ich hab immer nur nach Visual Basic gesucht, und nicht nach VBScript. Ein kleiner, aber entscheidender Unterschied 🤦♂️ Danke für den Schubs in die richtige Richtung Daniel Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 11, 2022 #4 Share Posted August 11, 2022 Gerne! Link to comment Share on other sites More sharing options...
Steiner Daniel Posted August 11, 2022 Author #5 Share Posted August 11, 2022 Ich stell euch mal mein "vorläufiges" Script zur Verfügung, vielleich braucht es ja jemand oder hat Verbesserungsvorschläge dazu 😊 ' Normalizes Number Function NormalizeNumber(sNumber) On Error Resume Next dim re1 'Prepare RegExp Set re1 = New RegExp re1.Global = True '+ durch 00 ersetzen re1.Pattern = "(^\+)" NormalizeNumber = re1.Replace(sNumber, "00") 'PBXScript.OutputTrace "<----- NormalizeNumber: Re1 executed: " & NormalizeNumber 'wenn nicht mit 00 startet, dann 0039 (oder anderen Ländercode) hinzufügen re1.Pattern = "^(?!00)(.*)" NormalizeNumber = re1.Replace(NormalizeNumber, "0039$1") 'PBXScript.OutputTrace "<----- NormalizeNumber: Re2 executed: " & NormalizeNumber 'alle "nicht Ziffern" entfernen re1.Pattern = "[^\d]" NormalizeNumber = re1.Replace(NormalizeNumber, "") 'PBXScript.OutputTrace "<----- NormalizeNumber: Re3 executed: " & NormalizeNumber '00 durch + ersetzen re1.Pattern = "(^00)" NormalizeNumber = re1.Replace(NormalizeNumber, "+") 'PBXScript.OutputTrace "<----- NormalizeNumber: Re4 executed: " & NormalizeNumber Set re1 = Nothing If Err <> 0 Then PBXScript.OutputTrace "<----- NormalizeNumber: Error: " & Err.Description Err.Clear End If End Function 1 Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 11, 2022 #6 Share Posted August 11, 2022 Da steckt noch ein Problem drin. Wenn in der Telefonnummer nur eine Vorwahl (Area Code) drin ist, und keine Landeskennung: z.B.: "040 123456" oder "(040) 123456" Die führende "0" bleibt dann erhalten und führt zu einer falschen kannonischen Nummer: +49040123456 Ich habe die Funktion entsprechend ein wenig erweitert (sie erhebt aber keinen Anspruch auf Vollständigkeit): '---------------------------------------------------------------- ' NormalizeNumber ' ' Converts a given number into cononical format ' ' Parameter: ' sNumber number to convert ' sDefCountryCode default country code, e.g. 0049 ' nInternalDigits number of digits in interal extensions, e.g. 3 oder 4 ' ' Return: ' string '---------------------------------------------------------------- Function NormalizeNumber (sNumber, sDefCountryCode, nInternalDigits) PBXScript.OutputTrace "-----> NormalizeNumber (" & sNumber & ", " & sDefCountryCode & ", " & nInternalDigits & ")" On Error Resume Next Dim sReturn, bPlus sReturn = Trim(sNumber) 'Prepare RegExp Dim re1 Set re1 = New RegExp re1.Global = True If Len(sReturn) > nInternalDigits Then bPlus = (Left(sReturn, 1) = "+") 'remove all none digits re1.Pattern = "[^\d]" sReturn = re1.Replace(sReturn, "") PBXScript.OutputTrace "Step 1: " & sReturn 'remove leading 0 If Left(sReturn, 3) <> "000" Then If Left(sReturn, 2) <> "00" Then If Left(sReturn, 1) = "0" Then sReturn = Right(sReturn, Len(sReturn)-1) PBXScript.OutputTrace "Step 2: " & sReturn End If End If End If 'add leading 00 if needed If bPlus Then sReturn = "00" & sReturn PBXScript.OutputTrace "Step 3: " & sReturn End If 'if doesn't start with 00, add the default country code re1.Pattern = "^(?!00)(.*)" sReturn = re1.Replace(sReturn, sDefCountryCode & "$1") PBXScript.OutputTrace "Step 4: " & sReturn 'finally replace 00 by + re1.Pattern = "(^00)" sReturn = re1.Replace(sReturn, "+") PBXScript.OutputTrace "Step 5: " & sReturn End If Set re1 = Nothing NormalizeNumber = sReturn PBXScript.OutputTrace "sReturn = " & sReturn PBXScript.OutputTrace "<----- NormalizeNumber" End Function Link to comment Share on other sites More sharing options...
Steiner Daniel Posted August 16, 2022 Author #7 Share Posted August 16, 2022 Diesen Fall habe ich natürlich "vergessen", bei uns (Italien) gibt es die "Orts-Null" ja nicht. Danke für die Ergänzung, 👍👍 Daniel Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now