javascript - 在文本对象 HTML 中定义允许的字符

标签 javascript html encoding

无论如何,我可以使用 HTML 和纯 JS 定义文本区域的编码吗?
我想让它们不允许使用特殊的 Unicode 字符(例如 ♣ Ch♠)。
有效字符范围(对我而言)是从 Unicode 代码点 U+0000U+00FF
可以在提交表单时将无效字符静默替换为空字符串(无需向用户发出警告)。

最佳答案

因此,正如您在评论中阐明的那样:您希望在提交表单时将您认为非法的字符替换为空字符串,而不会发出警告。

给定以下示例 html(正文内容):

<form action="demo_form.asp">
  First name: <input type="text" name="fname" /><br>
  Last name:  <input type="text" name="lname" /><br>
  Likes:      <textarea name="txt_a"></textarea><br>
  Dislikes:   <textarea name="txt_b"></textarea><br>
  <input type="submit" value="Submit">
</form>

这里是javascript的一个基本概念:

function demo(){
  for( var elms=this.getElementsByTagName('textarea')
       ,      L=elms.length
     ; L--
     ; elms[L].value=elms[L].value.replace(/[^\u0000-\u00FF]/g,'')
     ); 
}
window.onload=function(){
  document.forms[0].onsubmit=demo; //hook form's onsubmit use any method you like
};

基本思想是强制浏览器的正则表达式引擎使用 \uXXXX 符号匹配 Unicode(而非本地字符集)。
然后我们简单地创建一个范围:[\u0000-\u00FF] 最后指定我们要匹配该范围之外的所有内容:[^\u0000-\u00FF].
提交表单时,符合这些条件的所有内容都将替换为 ''(空字符串)。没有警告什么都没有。
您可以/应该自由扩展这个概念以将其合并到您的代码中(以适合您的代码流的方式)(并在需要时将其应用于 input type="text" 等),具体取决于根据您的进一步要求。

这应该可以帮助您入门!

编辑:
请注意,您当前的有效范围规范 (\u0000-\u00FF) 将有效地禁止所有此类“讨厌”的特殊字符,例如:

  • 花式引号 ‘ ’ “”
    (对于从 Word 等复制的人来说,这是一个很棒的功能),
  • € ™ Œ –

但是,它将很好地包含完整的 C1 控制 block ( all 32 control-characters )。然而另一方面..它与包含完整的 C0 控制 block 是一致的。
实际上,这现在是您的(您请求的)有效字符集:http://en.wikipedia.org/wiki/ISO/IEC_8859-1

如您现在所见,还有更多内容。这就是为什么理智的应用程序(最终)开始使用 Unicode(通常为网络编码为 UTF-8)并且只接受用户提供的内容(在(非常明确指定的)原因内)!
大多数常见验证问题(在现实世界中)只不过是验证概念的高中类(class)示例(甚至更多要点:用被认为易于理解的示例(如姓名/电子邮件/地址)来解释正则表达式的基础知识。可悲的是,它们甚至被一些政府身份系统(直到护照等)广泛应用于人名、地址等。事实上:即使是完整的当前 Unicode 也不能代表每个人的名字(以母语书写)在这个星球上(实际上还活着)!!现实世界的例子:尝试进入和离开商业航类,当你的登机牌有不同的凭据和你的护照(不管哪个是错误的)时。“只是”一个变音符号缺失将成为某个地方的问题,更糟糕的例子,想象一个女人的名字是德国人,姓氏是泰国人,嫁给了一个姓普通话的男人。
Source: xkcd.com/1171/

最后:请注意,在大多数情况下,这整个练习是无用的(如果您在没有警告的情况下默默地进行),因为:
您可能永远在没有适当清理的情况下在服务器端接受用户输入,因此您已经(在用户不知情的情况下悄悄地)清理了您对表单的输入你需要(对于一个新手程序员(忘记考虑(例如)禁用 javascript 的用户),这有时感觉就像在客户端重复已经在 javascript 中完成的工作)...
通常,在客户端(通常使用 javascript)复制服务器端行为的唯一用途是让用户动态地知道什么将被禁止服务器(无需来回发送数据)并可以相应地进行调整!

关于javascript - 在文本对象 HTML 中定义允许的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26587837/

相关文章:

javascript - Amcharts - 动态更改值轴属性

ruby-on-rails - python 相当于 ruby​​ 的 ASCII-8BIT 编码方案

c# - 来自 StreamReader 的原始文件字节,魔数(Magic Number)检测

html - twitter bootstrap 调整手机屏幕上的文字大小

php - 为什么相同编码的字符串在 MySQL 和 HTML 上呈现不同的效果?

javascript - Puppeteer Crawler - 错误:net::ERR_TUNNEL_CONNECTION_FAILED

javascript - 如何在不进入 AJAX 的情况下重新排序一行 html 输入字段

javascript - 使用 jQuery 动态创建多个 div 并为每个 div 分配不同的 css 属性

html - 关注表行 TR 以实现可访问性

html - CSS 悬停展开