Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将html文本输入限制为特定的字节数?_Javascript_Html_Validation_Forms - Fatal编程技术网

Javascript 将html文本输入限制为特定的字节数?

Javascript 将html文本输入限制为特定的字节数?,javascript,html,validation,forms,Javascript,Html,Validation,Forms,使用HTML5(或者更少优选JavaScript)是否可以将输入的最大长度限制为特定的字节数 我意识到我可以将以下字符限制为若干个: <input type="text" maxlength="4" /> 但这还不够好,因为我最多可以在其中输入四个双字节字符 显然,我正在验证这个服务器端,但我也希望在浏览器端验证这个 编辑:说清楚一点,我确实希望能够支持UTF-8。抱歉@elclanrs。如果估算不够好,我会过滤所有非单字节字符并对它们进行计数。此脚本有几个小UX故障可以清除,

使用HTML5(或者更少优选JavaScript)是否可以将
输入的最大长度限制为特定的字节数

我意识到我可以将以下字符限制为若干个:

<input type="text" maxlength="4" />

但这还不够好,因为我最多可以在其中输入四个双字节字符

显然,我正在验证这个服务器端,但我也希望在浏览器端验证这个


编辑:说清楚一点,我确实希望能够支持UTF-8。抱歉@elclanrs。

如果估算不够好,我会过滤所有非单字节字符并对它们进行计数。

此脚本有几个小UX故障可以清除,但它确实完成了我在chrome中测试时概述的基本任务:

<input id=myinp />


<script> // bind handlers to input:
   myinp.onkeypress=myinp.onblur=myinp.onpaste= function vld(e){
     var inp=e.target;
     // count bytes used in text:
     if( encodeURIComponent(inp.value).replace(/%[A-F\d]{2,6}/g, 'U').length > 4){
        // if too many bytes, try to reject:
        e.preventDefault;
        inp.value=inp.val||inp.value;
        return false;
     }
     // backup last known good value:
    inp.val=inp.value;
   }

</script>

//将处理程序绑定到输入:
myinp.onkeypress=myinp.onblur=myinp.onpaste=function vld(e){
var-inp=e.target;
//计算文本中使用的字节数:
if(encodeURIComponent(inp.value).replace(/%[A-F\d]{2,6}/g,'U')。长度>4){
//如果字节太多,请尝试拒绝:
e、 防止违约;
输入值=输入值| |输入值;
返回false;
}
//备份上次已知的正常值:
输入值=输入值;
}

clientside+serverside ajax?或者可以用
/[\w\s]+/
之类的东西限制
keydown
上的字符,这些字符都是1字节。用户最多可以输入4个字符,当使用UTF-8时,每个字符的长度都可以达到4个字节。我不明白这个问题的意义。为什么要将输入限制为一定数量的字节?数据将以字符形式处理。@JukkaK.Korpela感谢您提醒我非ASCII字符可以超过4字节。数据将不会在服务器上作为字符处理。我必须使用特定数量的字节,这是一个不可避免的限制。@AlessandroGabrielli我不太喜欢这个解决方案,因为我希望将流量保持在最低限度,但可能会达到这个目的。这看起来很棒,谢谢!根据这一点:UTF-8对于任何字符都可能有多达6个字节。一位同事向我解释说,这只适用于一字节和两字节字符。你有没有发现一种方法可以让它使用更多的语言?2个字节适合所有主要的网络使用语言(如果有人有,我想要一个相反的)。我修改了我的答案以支持6个字符的转义码,但我认为4个字符对任何人都应该足够了,但我不是语言学家……这很容易被低估。对于文本:“我是一个19字符的文本”,此方法计算17个字节,这是不正确的。您可以使用
encodeURIComponent(inp.value.replace(/\d/g,'X')).replace(/%[A-F\d]{2,6}/g,'U')