2011-02-14 50 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; 
    } 
    }