1

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

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

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

我也看过这个功能,它似乎有效,但对我来说似乎非常广泛。一定有更简单的方法吗?

4

1 回答 1

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
于 2013-07-11T15:20:39.430 回答