【问题标题】:Limit html text input to a particular number of bytes?将html文本输入限制为特定的字节数?
【发布时间】:2013-06-05 20:56:02
【问题描述】:

使用 HTML5(或者最好是 JavaScript)是否可以将 input 的最大长度限制为特定的字节数?

我意识到我可以通过以下方式限制字符数:

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

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

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

编辑:为了清楚起见,我确实希望能够支持 UTF-8。对不起@elclanrs。

【问题讨论】:

  • 客户端+服务器端ajax?
  • 或者也许只是限制keydown 上的字符,例如/[\w\s]+/,这将是1 个字节。
  • 用户最多可以输入四个字符,使用 UTF-8 时,每个字符最长为四个字节。我不明白这个问题的意义。为什么要将输入限制为一定数量的字节?无论如何,数据将作为字符处理。
  • @JukkaK.Korpela 感谢您提醒我非 ASCII 字符可以超过 4 个字节。数据不会在服务器上作为字符处理。我必须使用特定数量的字节是一个不可避免的限制。
  • @AlessandroGabrielli 我并不是很喜欢这种解决方案,因为我希望将流量控制在最低限度,但它可能会实现。

标签: javascript html validation forms


【解决方案1】:

这个脚本有几个小的 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>

【讨论】:

  • 这看起来很棒,谢谢!据此:stackoverflow.com/questions/5290182/…UTF-8 最多可以有 6 个字节用于任何字符。一位同事向我解释说,这只适用于一个和两个字节的字符。您是否看到了让它与更多人一起工作的方法?
  • 2 字节适合所有主要的网络使用语言 AFAIK(如果有人有的话,我会喜欢 contra)。我修改了我的答案以支持 6 个字符的转义码,但我认为 4 个字符对任何人来说都足够了,但我不是语言学家......
  • 这很容易被低估。对于文本:'I am a 19 char text',此方法计算 17 个字节,这是不正确的。你可以改用encodeURIComponent(inp.value.replace(/\d/g,'X')).replace(/%[A-F\d]{2,6}/g, 'U')
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多