読者です 読者をやめる 読者になる 読者になる

全角/半角カタカナ編。失敗。

カタカナの全角→半角を難しく変換するコード。やっている最中に別の方法思いついたので途中でポスト。ひらがな→カタカナは簡単なのでひらがなを半角カタカナに変更するんだったらひらがな→カタカナ→半角カタカナが一番かも...。

コード(途中...)

関数はバギーです。使い物になりません><!

String.prototype.toHankakuCase = function()
{
    var i, t, c, f, m, a = [];

    m =
    {
        0x30AB:0xFF6F
    };

    for(i=0,f=this.length;i<f;i++)
    {
        c = this.charCodeAt(i);

        switch(true)
        {
            case (c in m): a.push(m[c]); break;
            // ァア−ォオ
            case (0x30A1 <= c && c <= 0x30AA):
                t = c & 0x1;
                a.push([0xFF70,0xFF66][t] + ((c - 0x30A0 + t) >> 1));
                break;
            // カガ−チヂ
            case (0x30AB <= c && c <= 0x30C9):
                if(0x30CF < c){ c--; };
                t = c & 0x1;
                a.push(0xFF76 + ((c-0x30AB+t) >> 1));
                if(!t){ a.push(0xFF9E); };
                break;
            // ハバパ−ホボポ
            case (0x30CF <= c && c <= 0x30DD):
                t = c % 3;
                a.push(0xFF8A + ((c-0x30CF-t) / 3));
                if(t){ a.push([0xFF9E,0xFF9F][t-1]) };
                break;
            // マ−モ
            case (0x30DE <= c && c <= 0x30E2):
                a.push(0xFF93 + c - 0x30DE);
                break;
/*
            case ((0x30E3 <= c && c <= 0x30e8)):
                t = c & 0x1;
                a.push([0xFF94,0xFF96][t] + ((c - 0x30E2 + t) >> 1));
                break;
*/
            // ラ−ロ
            case ((0x30E9 <= c && c <= 0x30ED)):
                a.push(0xFF97 + c - 0x30E9);
                break;
        };
    };

    return String.fromCharCode.apply(null, a);
};

alert("ラリルレロ".toHankakuCase());