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

时间:2014-10-27 12:43:02

标签: javascript html encoding

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

3 个答案:

答案 0 :(得分:1)

所以,正如你在评论中澄清的那样:你想在没有警告的情况下在表格提交上用空字符串替换你认为非法的字符。

给出以下示例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控制块(all 32 control-characters)。但另一方面,它与包含完整的C0控制块一致 实际上,现在这是您(您要求的)有效字符集:http://en.wikipedia.org/wiki/ISO/IEC_8859-1

正如您现在所看到的,还有更多内容。这就是为什么理智的应用程序(最终)开始使用Unicode(通常为网络编码为UTF-8)并且只接受用户提供的内容(在(非常清楚地指定)原因内)!
大多数常见验证问题(在现实世界中)只不过是验证概念的高中课程示例(甚至更多)要点:使用被认为易于理解的例子来解释正则表达式的基础知识,例如名称/电子邮件/地址)。可悲的是,他们甚至被一些政府身份系统(直到护照等)广泛应用于人们的姓名,地址等。实际上:即使是现在的全部Unicode也不能代表每个人和#39 ;这个星球上的名字(原生文字)(实际上还活着)!!现实世界的例子:当您的登机牌与您的护照(不论哪一个是错的)有不同的凭证时,尝试进入和离开商业航班。&#39; Just&#39;一个破旧的失踪在某个地方会成为一个问题,更糟糕的例子,想象一个女人用德国名字,泰国姓氏并嫁给一个有普通话姓氏的男人。
Source: xkcd.com/1171/

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

答案 1 :(得分:0)

您可以使用表单属性accept-charset

  

accept-charset属性指定了字符编码   将用于表单提交。

     

默认值是保留字符串“UNKNOWN”(表示该字符串   encoding等于包含该文档的文档的编码   元素)。

请参阅此文档http://www.w3schools.com/tags/att_form_accept_charset.asp

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

实际上此问题已经得到解答 javascript to prevent writing into form elements after n utf 8 characters

答案 2 :(得分:0)

<!-----This is jquery script which hold to stop special unicode characters. -------->
<script>
$("#input-text").keypress(function(e)
{
    var code = e.which || e.keyCode;
    // 65 - 90 for A-Z and 97 - 122 for a-z 95 for _ 45 for - 46 for .
    if (!((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code == 95 || code == 46 || code == 45))
    {
        var text = $("#input-text").val();
        text = text.substring(0,text.length);
        $("#input-text").val(text);
    }
});

</script>

<!-----This is input text field-------->
<input id="input-text" name="input-text" type="text" >