見落としていた。

アルファベット禁止でjavascriptを書いてみた - sub Diary (仮)
…ね、簡単でしょう?

お詫びというのも変だけど、もっと簡単にしてみた。

これで、任意のJavaScriptから数字と記号以外を取り除けます。アルファベットだけではなく、漢字も。

二種類作りました。まず一つ目。



ソースは至ってシンプル。

$_01234567 = function(str){
    return [
        '(0)[\'constructor\'][\'constructor\'](\'',
        str.replace(/\'/g, '\\\'').replace(/[\u0080-\uffff]/g, function(m0){
            return '\\\\u' + (0x10000 + m0.charCodeAt(0)).toString(16).substr(1)
        }),
        '\')()'
    ].join('').replace(/[\x00-\x20A-Za-z]/g, function(m0){
        return '\\' + m0.charCodeAt(0).toString(8)
    });
}

id:reosabloの手法ほぼそのままですが、かな漢字にも対応しています。

もう一つは、こちら。



どうやっているかは、ソースを参照あれ。

$_76543210 = function(str){
    var ary = [];
    for (var i = 0, l = str.length; i < l; i++) ary[i] = str.charCodeAt(i);
    return [
        '(0)[\'constructor\'][\'constructor\'](\'a\',\'',
        'var c=[];for(var i=0;i<a.length;i++)c[i]=String.fromCharCode(a[i]);',
        'eval(c.join(\'\'))'.replace(/\'/g, '\\\''),
        '\')'
    ].join('').replace(/[\x00-\x20A-Za-z]/g, function(m0){
        return '\\' + m0.charCodeAt(0).toString(8)
    }) + '([' + ary.join(',') + '])';
}

どちらも Firefox 3.0.10, Safari 3.2.3, Opera 9.64, Chrome 2, IE7 で動作確認してあります。IE7の場合、promptで警告が出ますが一時的に許可すればちゃんと上記サンプルが動きます。

Enjoy!

(0)['\143\157\156\163\164\162\165\143\164\157\162']
['\143\157\156\163\164\162\165\143\164\157\162']
('\141','\166\141\162\40\143=[];
\146\157\162(\166\141\162\40\151=0;
\151<\141.\154\145\156\147\164\150;\151++)
\143[\151]=\123\164\162\151\156\147.\146\162\157\155\103\150\141\162\103\157\144\145(\141[\151]);
\145\166\141\154(\143.\152\157\151\156(\'\'))')
([97,108,101,114,116,40,39,68,97,110,32,116,104,101,32,74,97,118,97,12473,12463,12522,12503,12479,12449,39,41])