无论如何我可以使用 HTML 和纯 JS 在文本区域中定义编码吗?
我想让他们不允许特殊的 unicode 字符(例如♣♦♠)。
有效字符范围(出于我的目的)来自 Unicode 代码点 U+0000
至U+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)并且只接受用户提供的内容(在(非常明确指定的)原因内)!
最常见的验证问题(在现实世界中)只不过是验证概念的高中级示例(更重要的是:用被认为易于理解的内容来解释正则表达式的基础知识示例,例如姓名/电子邮件/地址)。可悲的是,它们甚至被一些政府身份系统(包括护照等)广泛应用于人们的姓名、地址等。事实上:即使是当前完整的 Unicode 也不能代表地球上每个人的姓名(以本地书写)(实际上是还活着)!!现实世界的例子:当你的登机牌和你的护照有不同的凭证时,试着进入和离开商业航类(不管哪个是错误的)。“只是”一个变音符号丢失将在某个地方成为问题,更糟糕的例子,想象一个女人有德国名字,泰国姓氏,嫁给了一个普通话姓氏的男人。

Source: xkcd.com/1171/
最后:请务必意识到,在大多数情况下,整个练习都是无用的(如果你在没有警告的情况下默默地练习),因为:
如果没有适当的清理,您可能永远不会只接受服务器端的用户输入 ,所以你已经(在用户不知情的情况下默默地)清理你的输入到你需要的表单(对于一个新手程序员(忘记考虑(例如)禁用javascript的用户,)这有时感觉就像重复已经在客户端用 javascript 完成的工作)...
通常,在客户端(通常使用 javascript)复制服务器端行为的唯一用途是让用户动态地知道服务器不允许什么(无需来回发送数据)并可以相应地进行调整!
关于javascript - 在文本对象 HTML 中定义允许的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26587837/