JS判斷字串位元組長度(自動識別中英文)

來源:互聯網
上載者:User

你早晚會用到的,用CSS來控制文字長度畢竟不是什麼需求都能滿足,現在後台也不管字元長度截取了,只能用JS來截取字串了。

 代碼如下 複製代碼

/**
 * 返回字元的位元組長度(漢字算2個位元組)
 * @param {string}
 * @returns {number}
 */
 
var getByteLen = function (val) {
    var len = 0;
    for (var i = 0; i < val.length; i++) {
        if (val[i].match(/[^x00-xff]/ig) != null) //全形
            len += 2;
        else
            len += 1;
    };
    return len;
}
var sAbc = '1a啊啊22飛3地方a';
var ol = getByteLen(sAbc);
alert('直接用length取得的位元組長度:' + sAbc.length);
alert('通過getByteLen()方法取得的位元組長度:' + ol);

通過上面的方法就可以繼續寫一個截取指定長度的新字串了,截取掉的部分用…補全:

 代碼如下 複製代碼

/**
 * 返回字元的位元組長度(漢字算2個位元組)
 * @param {string}{number}
 * @returns {string}   +'...'
 */
 
var cutStrForNum = function (str, num) {
    var len = 0;
    for (var i = 0; i < str.length; i++) {
        if (str[i].match(/[^x00-xff]/ig) != null) //全形
            len += 2;
        else
            len += 1;
    }
    if (len >= num) {
        newStr = str.substring(0, num) + "...";
    }
    return newStr;
}
var sAbc = '1a啊啊22飛3地方a';
alert(cutStrForNum(sAbc, 3));

看個執行個體JS判斷字元輸入個數


1. $('textarea#txtPrizeNote');     //表示textarea控制項名稱

2. 'span' 顯示剩餘字數的標籤

HTML:

 代碼如下 複製代碼

<div>
        <textarea id="txtPrizeNote" runat="server" height="74px" width="480px" maxlength="10"
            style="width: 480px; height: 74px; float: left"></textarea>
        <span style="color: Red;">*</span><br />
        剩餘字數:<span id="showmsg" style="color: red"></span>
</div>

 
<script type="text/javascript">
        //返回val的位元組長度
        function getByteLen(val) {
            var len = 0;
            for (var i = 0; i < val.length; i++) {
                if (val[i].match(/[^x00-xff]/ig) != null) //全形
                    len += 2;
                else
                    len += 1;
            }
            return len;
        }

        //返回val在規定位元組長度max內的值
        function getByteVal(val, max) {
            var returnValue = '';
            var byteValLen = 0;
            for (var i = 0; i < val.length; i++) {
                if (val[i].match(/[^x00-xff]/ig) != null)
                    byteValLen += 2;
                else
                    byteValLen += 1;

                if (byteValLen > max)
                    break;

                returnValue += val[i];
            }
            return returnValue;
        }

        $(function() {
            var _area = $('textarea#txtPrizeNote');
            var _info = _area.next();
            var _max = _area.attr('maxlength');
            var _val;
            _area.bind('keyup change', function() { //綁定keyup和change事件
                if (_info.find('span').size() < 1) {//避免每次彈起都會插入一條提示資訊
                    _info.append(_max);
                }

                _val = $(this).val();
                _cur = getByteLen(_val);

                if (_cur == 0) {//當預設值長度為0時,可輸入數為預設maxlength值
                    _info.text(_max);
                } else if (_cur < _max) {//當預設值小於限制數時,可輸入數為max-cur
                    _info.text(_max - _cur);
                } else {//當預設值大於等於限制數時
                    _info.text(0);

                    $(this).val(getByteVal(_val,_max)); //截取指定位元組長度內的值
                }
            });
        });
    </script>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.