VBScript は、どの文字を他のどの文字にマッピングしたいかを魔法のように認識していないため、自分でマッピングを作成する必要があります。ただし、一連の配列ではなく辞書としてマッピングを作成します。
Set mappings = CreateObject("Scripting.Dictionary")
mappings.Add "ä", "a"
mappings.Add "â", "a"
mappings.Add "á", "a"
mappings.Add "à", "a"
...
mappings.Add "Ä", "A"
mappings.Add "Â", "A"
...
Function canonicalize(ByVal addr)
For Each c In mappings.Keys
addr = Replace(addr, c, mappings(c))
Next
Set re = New RegExp
re.Pattern = "[^a-z0-9.@]"
re.Global = True
re.IgnoreCase = True
Canonicalize = re.Replace(addr, "")
End Function
関数の最後にある正規表現の置換により、以前のマッピングのいずれでもカバーされなかったすべての非標準文字が削除されます。
「置換クラス」を定義することにより、これを完全に正規表現で行うこともできます。
Set mappings = CreateObject("Scripting.Dictionary")
mappings.Add "äâáà..." , "a"
mappings.Add "ÄÂ..." , "A"
...
Function canonicalize(ByVal addr)
Set re = New RegExp
re.Global = True
re.IgnoreCase = False
For Each c In mappings.Keys
re.Pattern = "[" & c & "]+"
addr = re.Replace(addr, mappings(c))
Next
re.Pattern = "[^a-z0-9.@]"
re.IgnoreCase = True
Canonicalize = re.Replace(addr, "")
End Function