1

ユーザーをレジストリに追加する hta/VBscript スクリプトがあります。このスクリプトは、入力された姓名を受け取り、それらを電子メール アドレス (Firstname.Lastname@company.com) にまとめます。

å、ä、é、ô などの文字を通常の a から Z の文字に置き換えてほしい。それを行う簡単な方法はありますか?

Replace関数を見てきましたが、文字の配列ではなく 1 つの文字しか置換できないようです。

私はまた、この機能を見てきました. もっと簡単な方法があるはずですか?

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 に答える