Jump to content

Callrouting Script zum Nummern "normalisieren" mit RegEx


Steiner Daniel
 Share


Go to solution Solved by Tom Wellige,

Recommended Posts

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


  • Solution

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.

 

 

Link to comment
Share on other sites


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

 

Link to comment
Share on other sites


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


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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and have taken note of our Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.