js 限制输入框的字节数,中文两个字节,英文字母一个字节

本文介绍了一种使用JavaScript实现的对输入框内中文和字母进行16字节长度限制的方法,通过特殊字符替换及字节计算确保输入符合要求。

也许在网上有很多类似的文章,但是这里大家应该知道,js里面,中文和字母的长度都是1,但是数据库不知道呀,数据库很多都是按照字节来的,所以,控制输入框的字节数看来比长度限制更为重要。

提出问题:

1、限制文本框为16个字节,只能输入中文和字母

解决思路:

1、判断只能是中文和英文

2、判断长度只能为16

3、有一个不符合,将进入循环:

第一步:替换掉所有的#,因为我后面要用到这个特殊字符

第二步:将所有的中文替换为:@@

第三步:截取0-20的字节长度,这里中文已经转成两个长度了

第四步:将所有的@@转换成#

第五步:替换掉最后可能出现的中文的半个字节,一个@

第六步:获取最后剩的字符长度,也就是要截取的字符串的长度


<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
</head>
<body>

<input type="text" id="input"/>


<script>

    $('#input').on('keyup keydown', function () {
        var $this = $(this);
        var str = $this.val();
        var limitLen = 16;
        var sign = /[\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]/g;

        var flag = /^[\u4e00-\u9fa5a-zA-Z]+$/.test(str) && str.replace(/[\u4e00-\u9fa5]/g, '@@').length <= limitLen ? true : false;
        if (!flag) {

            var convertStr = str.replace(sign,'').replace(/#/g,'').replace(/[\u4e00-\u9fa5]/g, '@@').substr(0, limitLen);

            var len = convertStr.replace(/@@/g, '#').replace('@', '').length;

            var val = str.substring(0, len);
            $this.val(val);
        }
    });

</script>
</body>
</html>



你可以使用 JavaScript 的事件监听器来实现输入框限制字节长度的功能。具体做法如下: 1. 在 HTML 中,给输入框添加一个事件监听器,监听输入事件(oninput): ``` <input type="text" oninput="checkLength(this)" /> ``` 2. 在 JavaScript 中,编写 checkLength 函数,该函数会在用户输入时被调用: ``` function checkLength(input) { // 获取输入框的值 var value = input.value; // 计算字节数 var byteLength = 0; for (var i = 0; i < value.length; i++) { var charCode = value.charCodeAt(i); if (charCode <= 127) { byteLength += 1; // 英文字符 } else { byteLength += 2; // 中文字符 } } // 如果字节数超过了限制,截断输入框的值 if (byteLength > 50) { input.value = truncate(value, 50); } } function truncate(str, len) { var byteLen = 0; for (var i = 0; i < str.length; i++) { var charCode = str.charCodeAt(i); if (charCode <= 127) { byteLen += 1; } else { byteLen += 2; } if (byteLen > len) { return str.substring(0, i); } } return str; } ``` 3. checkLength 函数中,先获取输入框的值,然后计算字节数。为了区分中文字符和英文字符,我们使用 charCodeAt 函数获取字符的 Unicode 编码,如果编码小于等于 127,就认为是英文字符,否则就认为是中文字符。英文字符算一个字节中文字符算两个字节。 4. 如果字节数超过了限制,我们就使用 truncate 函数截断输入框的值。truncate 函数也是通过计算字节数来实现的。如果字节数超过了 len,就返回字符串的前 len 个字符。 这样,就可以实现输入框限制字节长度的功能了。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值