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

Javascript 在HTML文本对象中定义允许的字符,javascript,html,encoding,Javascript,Html,Encoding,我是否可以使用HTML和纯JS在文本区域中定义编码? 我希望它们不允许使用特殊的unicode字符(例如♣♦♠). 有效字符范围(就我而言)是从Unicode代码点U+0000到U+00FF 提交表单时,可以用空字符串静默替换无效字符(不向用户发出警告)。您可以使用表单属性accept charset accept字符集属性指定要使用的字符编码 将用于表格提交 默认值是保留字符串“未知”(表示 编码等于包含 元素) 请参阅此文档 我不能说这是否会保护文本字段,但至少它控制表单提交的字符集 实际上

我是否可以使用HTML和纯JS在文本区域中定义编码?
我希望它们不允许使用特殊的unicode字符(例如♣♦♠).
有效字符范围(就我而言)是从Unicode代码点
U+0000
U+00FF


提交表单时,可以用空字符串静默替换无效字符(不向用户发出警告)。

您可以使用表单属性accept charset

accept字符集属性指定要使用的字符编码 将用于表格提交

默认值是保留字符串“未知”(表示 编码等于包含 元素)

请参阅此文档

我不能说这是否会保护文本字段,但至少它控制表单提交的字符集

实际上这个问题已经得到了回答

因此,正如您在评论中所阐明的:您希望在提交表单时,在没有警告的情况下,用空字符串替换您认为非法的字符

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

基本思想是使用
\uxxx
符号强制浏览器的正则表达式引擎匹配Unicode(而不是本地字符集)。
然后我们只需创建一个范围:
[\u0000-\u00FF]
,最后指定我们要匹配该范围之外的所有内容:
[^\u0000-\u00FF]

在提交表单时,所有符合这些条件的内容都将替换为
(空字符串)。无警告无任何内容。
您可以/应该自由扩展此概念,将其纳入代码中(以适合您的代码流的方式)(并在需要时将其应用于
input type=“text”
等),具体取决于您的进一步需求

这应该让你开始

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

  • 花哨的引号
    ''”

    (这是一个很好的功能,可以让人们从Word等中复制。)
  • €™ Œœ
但是,它将很好地包含完整的C1控制块()。但是另一方面,它与包含完整的C0控制块一致。
实际上,这是您的(您请求的)有效字符集:

正如您现在所看到的,这还有很多。这就是为什么理智的应用程序(最终)开始使用Unicode(通常在web上编码为UTF-8)并且只接受用户提供的内容(在(非常明确的)原因范围内)!
大多数常见的验证问题(在现实世界中)只不过是验证概念的高中课堂示例(更重要的是:用易于理解的示例(如姓名/电子邮件/地址)解释正则表达式的基础)可悲的是,它们甚至被一些政府身份系统(高达护照等)广泛应用于人们的姓名、地址等。事实上:即使是完整的当前Unicode也不能代表地球上每个人的姓名(以母语书写)(实际上还活着)!!现实世界的例子:当您的登机牌与您的护照具有不同的凭证时,尝试进入和离开商业航班(无论哪个凭证是错误的)..“只是”一个乌姆劳特失踪在某些地方会是个问题,更糟糕的例子是,想象一个姓德、姓泰的女人嫁给了一个姓普通话的男人。。

最后:请务必意识到,在大多数情况下,整个练习都是无用的(如果您在没有警告的情况下默默地进行),因为:
如果没有适当的清理,您可能永远不会只接受服务器端的用户输入,因此您已经(在用户不知道的情况下)将输入清理到所需的格式(对于新手程序员(例如忘记考虑禁用javascript的用户,)这有时感觉就像在客户端重复javascript中已经完成的工作)…

通常,在客户端复制服务器端行为(通常使用javascript)的唯一用途是让用户动态地知道服务器允许什么(而不来回发送数据)并且可以相应地进行调整!

请澄清您想要排除的“特殊unicode字符”或指定您想要接受的字符。我这样问是因为:如果您(例如)使用表单的属性
接受字符集
,您仍然会接受字符(来自该字符集)在0x7F和0xFF之间。这也会/可能会对数据提交到服务器的方式产生影响。这一点非常模糊。UTF-8是Unicode字符集的编码(可变字节长度)(您希望排除其中的“特殊字符”)。请进一步指定您的需要:允许使用哪个字符(s/range),哪个字符(s/range)(s) )是否允许dis?好的,这将清除所需的范围。现在您希望如何处理异常?(a:)在用户在textarea中键入时将其替换为零(空字符串)(这可能会使textarea的光标跳回textarea的第一个字符位置)(b:)在键入或提交时警告用户(c:)在提交时以静默方式替换非法字符(d:)弹出一个警告屏幕,通知用户哪些字符是不允许的(以及在哪里)(并给他们机会更改它们)等等等等,混合和匹配..那么,你想如何处理例外?在提交时用空字符串替换而不发出警告。我冒昧地将你评论中给出的相关澄清添加到你的问题中。我尝试过使用表单方法,但它并不能解决我的问题。我不确定我是否做错了,但我是生病的
<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>
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
};