2009-10-02 16 views
1

因爲我覺得人有我也有可能會出現一些非標準的解決方案之前,遇到它大量的時間..任何人都可以給任何暗示方向如何防止用戶輸入非ASCII字符一個文本框。防止在打字文本非ASCII字符

+1

你需要做的客戶端?爲什麼不做服務器端?這樣,即使用戶關閉了JavaScript,您仍然可以刪除不需要的字符。此外,防止用戶輸入非ASCII字符似乎有點幼稚,有點過時;-) –

+0

你是什麼意思的「非ASCII」? Unicode字符?或者只是字符超出0-127範圍? –

回答

2

我個人覺得與互動有點惱人的標準模式修修補補,但如果你必須過濾鍵盤輸入,你可以通過攔截按鍵事件,取消你不想讓那些做:

var allowed = /[a-zA-Z0-9]/; // etc. 

window.onload = function() { 
    var input = document.getElementById("test"); 

    input.onkeypress = function() { 
     // Cross-browser 
     var evt = arguments[0] || event; 
     var char = String.fromCharCode(evt.which || evt.keyCode); 

     // Is the key allowed? 
     if (!allowed.test(char)) { 
      // Cancel the original event 
      evt.cancelBubble = true; 
      return false; 
     } 
    } 
}; 

而且它更簡潔和漂亮的jQuery:

var allowed = /[a-zA-Z0-9]/; // etc. 

$(function() { 
    var input = document.getElementById("test"); 

    $("#input").keypress(function (e) { 
     // Is the key allowed? 
     if (!allowed.test(String.fromCharCode(e.keyCode || e.which))) { 
      // Cancel the original event 
      e.preventDefault(); 
      e.stopPropagation(); 
     } 
    }); 
}); 
+0

你的正則表達式應該是「var allowed =/[a-zA-Z0-9] /;」 – Vlad

+0

@Vlad:感謝您的注意!固定。 –

+2

這有一個問題,它不允許用戶退格/刪除,以糾正他在現場輸入的內容,也不允許用戶使用箭頭鍵在現場移動。有沒有更好的方法來處理這個問題,而不僅僅是把這個添加到函數的開頭: if(e.keyCode == 8)return; if(e.keyCode == 37)return; if(e.keyCode == 38)return; if(e.keyCode == 39)return; if(e.keyCode == 40)return; –

1

如果你正在尋找一個簡潔的ASP.NET解決方案,您可以使用RegularExpressionValidator控件來限制一個ASP.NET TextBox的內容。除了頁面標記定義和用於驗證的正則表達式之外,您不必編寫任何服務器或客戶端代碼。驗證將在雙方爲您檢查。

例如:

<asp:TextBox id="txtItem" runat="server" MaxLength="50"></asp:TextBox> 
<asp:RegularExpressionValidator id="SomeFieldValidator" runat="server" 
    CssClass="SomeClass" ControlToValidate="txtItem" 
    ErrorMessage="This field only accepts ASCII input." Display="Dynamic" 
    ValidationExpression="^[A-Za-z0-9]*$"></asp:RegularExpressionValidator> 

在該片段中,txtItem是需要驗證文本框。 SomeFieldValidator控件使用ControlToValidate屬性鏈接到txtItem控件。 ValidationExpression屬性是用於強制執行TextBox內容的正則表達式。根據文檔,該表達式需要被編寫爲與JScript和.NET Regex正則表達式兼容。另外,我只將正則表達式設置爲字母數字字符。你可能要考慮使用類似^[\ W \ S] * $ instead-如果你在打印的字符,而不是僅僅ASCII真正感興趣。

A面的好處是用這種方法是,你還可以插入這些驗證到的可更新的應用程序.aspx頁,而不需要比應用程序池重新啓動的任何其他。

也得心應手是的RequiredFieldValidator控制。你可以用文本框鏈接這些控件,也有的RegularExpressionValidator連接。這些處理需要在TextBox中輸入的情況。

這裏有一些引用鏈接。

RegularExpressionValidator Control at MSDN

RequiredFieldValidator Control at MSDN

Character Classes at MSDN (for Regular Expressions)

JavaScript RegExp Object Reference