現在地

全角の英数字が大嫌い

作成者:mattz 作成日:2009/06/09(火) 14:57

キライなんです。醜いから。なので、極力目に入らないよう次のようなスクリプトを書いた。

// ==UserScript==
// @exclude http://mattz.xii.jp/*
// ==/UserScript==
(
function(){
  document.addEventListener(
    'DOMContentLoaded',
    function(){
      document.body.innerHTML = document.body.innerHTML.replace(/([0-9A-Za-z ])/g,function(str,p1){
        return {'0':'0','1':'1','2':'2','3':'3','4':'4','5':'5','6':'6','7':'7','8':'8','9':'9',
          'A':'A','B':'B','C':'C','D':'D','E':'E','F':'F','G':'G','H':'H','I':'I','J':'J','K':'K',
          'L':'L','M':'M','N':'N','O':'O','P':'P','Q':'Q','R':'R','S':'S','T':'T','U':'U','V':'V',
          'W':'W','X':'X','Y':'Y','Z':'Z','a':'a','b':'b','c':'c','d':'d','e':'e','f':'f','g':'g',
          'h':'h','i':'i','j':'j','k':'k','l':'l','m':'m','n':'n','o':'o','p':'p','q':'q','r':'r',
          's':'s','t':'t','u':'u','v':'v','w':'w','x':'x','y':'y','z':'z','(':'(',')':')',' ':' '}[p1];
      });
    },false
  );
})();

書いたけど、一部のスクリプトを殺してしまうようなので、ご利用は計画的に。

例えば、このDrupalの新規エントリ作成画面のスクリプトが動きません。おかしいなと思ったら、@excludeに追加していただくとか、根本的な問題を修正していた だくとか、そもそも使うのをやめるとかしてください。

2009/10/21 追記

別のスクリプトを作っている過程で、このスクリプトの問題点が分かったので対処。

ついでに、regexp - 全角英数字を半角にの全半変換関数をまんまコピーして作り直した。

Bookmarklet - link them all!でいいじゃねーかって?おっしゃる通り。

// ==UserScript==
// ==/UserScript==
(
function(){
  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);
    };
    return function(s){ return s.replace(re_fullwidth, substitution) };
  })();
  window.addEventListener(
    'DOMContentLoaded',
    function(){
      var x = document.evaluate('//', document, null, 7, null);
      var l = x.snapshotLength;
      var val;
      for(i = 0;i < l;i++){
        if('#text' == x.snapshotItem(i).nodeName){
          val = x.snapshotItem(i).nodeValue;
          x.snapshotItem(i).nodeValue = fascii2ascii(val);
        }
      }
    },false
  );
})();