きっかけは、はてなハイク。

自分と根本的にあわない人 - fmht7 - はてなハイク
PCで英数字をダブルバイトで入力する人

禿同、しかし人を憎みたくなかったので。

Perlではお茶の子さいさい。

perl - dankogai - はてなハイク
perl -CIO -ple 'tr/\x{FF01}-\x{FF5e}/\x21-\x7e/'

は脊髄でひねり出せた。

どうせならJavaScriptでもやってみよう、ということでひねり出したのがこちら。

var fascii2ascii = (function(){
  var cclass
   = '['+String.fromCharCode(0xff01)+'-'+String.fromCharCode(0xff5e)+']';
  var re_fullwidth = new RegExp(cclass, 'g');
  var substitution = function(m){
    return String.fromCharCode(m.charCodeAt(0) - 0xfee0); // 0xff00 - 0x20
  };
  return function(s){ return s.replace(re_fullwidth, substitution) };
})();

これで、

でid:ululunお嘆きの

はてなブックマーク - 煩悩ブックマーク / 2007年12月11日
URIが半角で書かれているだけマシ

も大丈夫。すでにlinkthemall.jsの方はこれを含んだ形にupdateしました。新聞社のサイトなど、全角がうざいところで使うとぐーでしょう(特にasahi.comとか)。

Enjoy!

Dan the Regular Expressionist

追記: 以下を受けて少し書き換え。

JavaScriptには\uXXXXがあるんですよ[文系大学的IT系の悲哀]
置換に使う関数オブジェクトもあらかじめ初期化しておかなければ効果は半減です。