禁用文本区域中的某些特殊字符

时间:2011-02-14 10:50:32

标签: javascript textarea special-characters

嘿伙计们,我正在考虑如何禁止用户输入一些特殊字符,例如<和>。但我希望他们使用句号,逗号和问号以及惊叹号和引号。我已经提出了这段代码,但它似乎不允许任何特殊字符。:

<script type="text/JavaScript">
function valid(f) {
!(/^[A-zÑñ0-9]*$/i).test(f.value)?f.value = f.value.replace(/[^A-zÑñ0-9]/ig,''):null;
} 
</script>

3 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,它们都不是一个好方法,但我们会做到这一点。

  1. 您可以绑定元素上的onkeyup/onkeydown/onkeypress个事件,并取消已列入黑名单的字符的事件。但这并不能阻止人们将字符粘贴到字段中。

  2. 您可以绑定到元素的onchange事件,并在用户完成输入后从中删除列入黑名单的字符。

  3. javascript中任何类型的消毒都存在这样的问题:对于具有一点技术知识的用户而言,这是一件小事,无论如何都要绕过这些措施并仍然将违规字符上传到服务器。

    因此,如果您不想在用户生成的输入中允许使用特殊字符,则应该

    1. 在提交userinput后删除它们
    2. 保留它们,但将其编码为html实体&gt;&lt;,例如><,然后再将它们输出到您网页的任何位置。

答案 1 :(得分:1)

试试这个...

var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";

  for (var i = 0; i < document.formname.fieldname.value.length; i++) {
    if (iChars.indexOf(document.formname.fieldname.value.charAt(i)) != -1) {
    alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again.");
    return false;
    }
  }

答案 2 :(得分:0)

为什么不简单地检查“onKeyDown”事件上按下的字符?

<textarea id="foo"></textarea>

<script>
 document.getElementById('foo').onkeydown = validate;

 function validate(){
   var evtobj = window.event? event : e; // IE event or normal event
   var unicode = evtobj.charCode? evtobj.charCode : evtobj.keyCode;
   var actualkey = String.fromCharCode(unicode);
 ]

 return (/^[A-zÑñ0-9]*$/i).test(actualKey);
</script>

这只是获取被按下的键,如果它是有效的,则返回true,否则为false,这在术语中确定该键是否实际写入textarea中