输入框输入限制为1-64个字符,这个输入框能输入多少个汉字?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入框输入限制为1-64个字符,这个输入框能输入多少个汉字?相关的知识,希望对你有一定的参考价值。

参考技术A 最多输入16-32个汉字追问

我也是这么理解的
为啥别人说可以输入64个汉字呢

追答

64个字符不等于64个汉字,一个汉字占用2-4个字符,所以不可能是64个字符

追问

一个框最大为64个字符 一个汉字占两个字符 能输入多少个汉字 我感觉小学生都会算
为啥那些人还是强调是64呢
说的理由还狗屁不通

追答

你记住64个字符占用的空间不等于64个汉字占用的空间

参考技术B UTF-8编码中,一个汉字占用3个字节,一个英文字母或数字占用1个字节。因此,如果输入框限制为1-64个字符,最多能输入64个英文字母或数字,或者21个汉字。具体计算公式为:
- 最多输入64个字节,一个汉字占用3个字节,因此最多可以输入64/3=21.33(向下取整为21)个汉字。
- 最少输入1个字节,一个汉字占用3个字节,因此最少可以输入1/3=0.33(向上取整为1)个汉字。
需要注意的是,这里的汉字指的是中文简体汉字。如果包括繁体汉字、符号、标点等其他字符,实际输入的字符数可能会有所不同。

input输入框限制20个字符,十个汉字

英文和数字为一个字符,汉字为两个字符

在 Web 开发中,经常要对表单元素的输入进行限制,比如说不允许输入特殊字符,标点。通常我们会监听 input 事件:

inputElement.addEventListener(‘input‘, function(event) {
  let regex = /[^1-9a-zA-Z]/g;
  event.target.value = event.target.value.replace(regex, ‘);
  event.returnValue = false
});

这段代码在 Android 上是没有问题的,但是在 iOS 中,input 事件会截断非直接输入,什么是非直接输入呢,在我们输入汉字的时候,比如说「喜茶」,中间过程中会输入拼音,每次输入一个字母都会触发 input 事件,然而在没有点选候选字或者点击「选定」按钮前,都属于非直接输入。

这显然不是我们想要的结果,我们希望在直接输入之后才触发 input 事件,这就需要引出我要说的两个事件—— compositionstartcompositionend

compositionstart 事件在用户开始进行非直接输入的时候触发,而在非直接输入结束,也即用户点选候选词或者点击「选定」按钮之后,会触发 compositionend 事件。

var inputLock = false;
function do(inputElement) {
    var regex = /[^1-9a-zA-Z]/g;
    inputElement.value = inputElement.value.replace(regex, ‘);
}

inputElement.addEventListener(‘compositionstart‘, function() {
  inputLock = true;
});


inputElement.addEventListener(‘compositionend‘, function(event) {
  inputLock = false;
  do(event.target);
})


inputElement.addEventListener(‘input‘, function(event) {
  if (!inputLock) {
    do(event.target);
    event.returnValue = false;
  }
});

添加一个 inputLock 变量,当用户未完成直接输入前,inputLock 为 true,不触发 input 事件中的逻辑,当用户完成有效输入之后,inputLock 设置为 false,触发 input 事件的逻辑。这里需要注意的一点是,compositionend 事件是在 input 事件后触发的,所以在 compositionend事件触发时,也要调用 input 事件处理逻辑。

对于input输入框限制20个字符,十个汉字

根据这个原理,我们可以这样实现

var inputLock = false;
var deviceName=document.getElementById("device_name_input");
if(localStorage.getItem("deviceName")){
deviceName.setAttribute("value",localStorage.getItem("deviceName"));
}
//中文输入开始
deviceName.addEventListener(‘compositionstart‘, function() {
inputLock = true;
});
//中文输入结束
deviceName.addEventListener(‘compositionend‘, function(event) {
inputLock = false;
limitWords()
});
//计算输入字符的总数
function limitWords() {
var ChiLength=0;//中文汉字数
var maxLength=0;
function strlen(str){
var newDeviceNameVal;
var len = 0;
ChiLength=0;//中文汉字数
for (var i=0; i<str.length; i++) {
var c = str.charCodeAt(i);
var one = (c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f);
//单字节加1
if (one&&len<=20) {
len++;
maxLength++;
} else if(len<20) {
len+=2;
ChiLength++;
maxLength++;
}
}
return len;
}
var deviceNameVal=event.currentTarget.value;
var deviceNameInput=document.getElementById("device_name_input");
var strLength=strlen(deviceNameVal);
//根据字符串中的汉字数,截取最终显示的字符
deviceNameInput.value=event.currentTarget.value.substring(0,20-ChiLength);
    if(strLength>=20){
var newMaxLength=maxLength;
deviceNameInput.setAttribute("maxlength",newMaxLength);
}else{
deviceNameInput.setAttribute("maxlength",20);
}
}
deviceName.addEventListener("input",function(event){
if (!inputLock) {
limitWords()
event.returnValue = false;
}
})




















































以上是关于输入框输入限制为1-64个字符,这个输入框能输入多少个汉字?的主要内容,如果未能解决你的问题,请参考以下文章

在js中怎么让文本框显示的字符变成密码格式

HTML如何禁止文本框输入

SQL的语句最大长度限制多少字符

input输入框限制20个字符,十个汉字

如果输入框超过字符限制,则显示跨度标签消息

VB文本框怎样限制只能输入数字值