アプリ版:「スタンプのみでお礼する」機能のリリースについて

ASP(VBScript)での開発をしています。

全角英数記号を、半角英数記号に変換したくて、以下のメソッドを
作りました。

Function FunFullToHalf(ByVal StrTarget)
Dim ObjBASP21
Dim StrHalf

Set ObjBASP21 = Server.CreateObject("basp21")
StrHalf = ObjBASP21.StrConv(StrTarget,8)

FunFullToHalf = StrTarget
End Function

しかし、これだと、全角カタカナまで半角になってしまい、困っています。
回避策を教えていただけないでしょうか。

A 回答 (1件)

だったら関数を自作すれば?


所詮変換の方向が [全角]→[半角] なんだし、変換してもよい文字の一覧が質問者の頭の中にあるんだろうし。

泥臭いけれど、あらかじめ変換候補としている文字の一覧と、変換後イメージの一覧を持っておいて、対象文字列の先頭から順に一文字ずつ変換するって方法。

' 変換してもよい文字の一覧
Const wideList = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-=_"
' 変換後の文字一覧(変換してもよい文字の一覧と同じ並び、同じ数にしておく)
Const narrowList = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-=_"

Dim src
src = "Aあア1-ーBk_" ' これを変換する。あアー の3文字以外は変換したい。
Dim dest
dest = conv(src) ' 変換する conv 関数を呼び出す
WScript.Echo dest

' 変換前の文字列を受け取って、変換した文字列を返す
Function conv(aSrc)
  Dim returnValue

  ' ソース文字列を 1文字ずつ取り出す
  Dim srcPos
  For srcPos = 1 To Len(aSrc)
    Dim hit
    hit = False

    ' 変換候補リストを 1文字ずつ取り出す
    Dim listPos
    For listPos = 1 To Len(wideList)
      ' 比較して変換候補リストにあればフラグを立てる
      If Mid(aSrc, srcPos, 1) = Mid(wideList, listPos, 1) Then
        hit = True
        Exit For
      End If
    Next

    ' フラグが立っていれば変換し、立っていなければソースの文字を使用する
    If hit Then
      returnValue = returnValue & Mid(narrowList, listPos, 1)
    Else
      returnValue = returnValue & Mid(aSrc, srcPos, 1)
    End If
  Next

  conv = returnValue
End Function
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!