2011-02-14 33 views
1

嗨,大家好,我正在考虑禁止用户输入一些特殊字符(如<和>)的方法。但我希望他们使用句号和逗号,问号和感叹号和引号。我想出了这段代码,但它似乎并没有让任何特殊字符:禁用文本区域中的一些特殊字符

<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> 
+1

怎么样的井号``#,波浪`〜`,`plus`和`minus`?来自Word的幻想破折号? `äöü`变音器?创建一个允许的字符清晰的列表是一个疯狂的工作量。这是为了防止人们注入HTML?有更好的方法来做到这一点。 – 2011-02-14 10:51:42

回答

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,这一点,在短期,确定按键被实际写在文本区域或不

1

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

  1. 可以绑定到的元素onkeyup/onkeydown/onkeypress事件,并取消已列入黑名单的人物事件。但这并不会阻止人们将角色粘贴到场中。

  2. 您可以绑定到该元素的onchange事件,并且一旦用户完成输入,它们会从中删除列入黑名单的字符。

与任何类型的JavaScript消毒这样的问题是,它是平凡与专有技术的一点点用户,来规避这些措施,仍然上传违规字符到服务器反正。

所以,如果你不希望允许用户生成的输入特殊字符,您应该

  1. 删除服务器端的userinput提交后
  2. 保持他们,但编码成HTML实体&gt;例如&lt;><,然后将它们输出到网页的任何位置。
1

这种尝试......

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

    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; 
    } 
    }