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