全半角转换

半角空格的charCode为32,全角空格为12288。其他半角字符(33 – 126)与全角(65281 – 65374) 的对应关系是:均相差65248。

 

<script type="text/javascript">
  var hash = {'32' : '\u3000'};
  // 半角转全角
  function sbc2dbc(str) {
    var ret = [], i = 0, len = str.length, code, chr;
    for (; i < len; ++i) {
      code = str.charCodeAt(i);
      chr = hash[code];
      if (!chr && code > 31 && code < 127) {
        chr = hash[code] = String.fromCharCode(code + 65248);
      }
      ret[i] = chr ? chr : str.charAt(i);
    }
    return ret.join('');
  }
</script>

 

同理:

 

<script type="text/javascript">
  var hash = {'12288' : ' '};
  // 全角转半角
  function dbc2sbc(str) {
    var ret = [], i = 0, len = str.length, code, chr;
    for (; i < len; ++i) {
      code = str.charCodeAt(i);
      chr = hash[code];
      if (!chr && code > 65280 && code < 65375) {
        chr = hash[code] = String.fromCharCode(code - 65248);
      }
      ret[i] = chr ? chr : str.charAt(i);
    }
    return ret.join('');
  }
</script>

 

上面的代码会将33 - 126中间的符号也转换。很多时候,这并不是我们需要的(比如将@转换为@)。下面的代码侵入性更小:

 

<script type="text/javascript">
  var hash = {};
  // 半角转全角,仅转换 [0-9a-zA-Z]。
  function sbc2dbc_w(str) {
    var ret = [], i = 0, len = str.length, code, chr;
    for (; i < len; ++i) {
      code = str.charCodeAt(i);
      chr = hash[code];
      if (!chr &&
        (47 < code && code < 58 ||
        64 < code && code < 91 ||
        96 < code && code < 123)) {
        chr = hash[code] = String.fromCharCode(code + 65248);
      }
      ret[i] = chr ? chr : str.charAt(i);
    }
    return ret.join('');
  }
</script>

你可能感兴趣的:(JavaScript)