VBScript将字符串转换为a-z A-Z 0-9

时间:2013-07-11 14:57:41

标签: input vbscript replace user-input hta

我有一个hta / VBscript脚本,可以将用户添加到注册表中。该脚本将输入的名字和姓氏一起放入电子邮件地址(Firstname.Lastname@company.com)。

我希望用å,ä,é,ô等字母替换为普通的a到Z字母。有没有一种简单的方法可以做到这一点?

我查看了Replace函数,但它似乎只能替换一个字母而不是它们的数组。

我也看过this function,这似乎有效,但对我来说似乎非常广泛。必须有一个更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

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