zoukankan      html  css  js  c++  java
  • JavaScript 全半角转换

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

    找好规律,代码就好写了:

    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('');
    }

    同理:

    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('');
    }

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

    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('');
    }

    详细测试页面:sbc2dbc-test.html

  • 相关阅读:
    三、Antd react 组件调用ref的用法获取实例
    三、gitextension 报错无法检出版本库的时候
    二、安装引入 antd
    一、React项目骨架搭建
    一、JAVA基础知识
    五、Maven创建Spring(IDEA2019-3-3)
    python爬取快手ios端首页热门视频
    接口测试之基础篇--http协议
    一些测试面试题
    性能测试一些相关的概念
  • 原文地址:https://www.cnblogs.com/lyz8/p/1691147.html
Copyright © 2011-2022 走看看