2010-01-04 52 views
4

我正在創建一個將輸入字符串發送到移動設備的應用程序。有些設備在編碼特殊字符時遇到問題,所以我想創建一個不允許用戶在PC上輸入特殊字符的過濾器。字符串過濾器:檢測非ASCII標記

該應用程序是用C#(.NET 3.5)編寫的,我想將一個方法附加到按鍵事件上。僞代碼如下:

private void checkTextBoxContent(TextBox txtEntry) 
{ 
    if(txtEntry.Text contains non-ASCII sign) 
    { 
     show messageBox; 
     remove the last entered character; 
    } 
} 

有誰知道是否有檢測ASCII /非ASCII符號,使能在條件中使用任何現有的方法

txtEntry.Text包含非ASCII標誌?

謝謝!

回答

5

那麼你可以這樣做:

public static bool IsAllAscii(string text) 
{ 
    return text.All(c => c >= ' ' && c <= '~'); 
} 

我不知道你真的想只是刪除最後一個字符,雖然進入 - 考慮剪切和粘貼整個非ASCII字符串...

2

這是(使用System.Text.RegularExpressions)正則表達式選項

string s = "søme string"; 
    bool result = Regex.IsMatch(s, @".*[^\u0000-\u007F].*"); // result == true 
+0

沒有那麼簡單。 – JohnE

+0

您可能不想將\ u0000發送給移動設備。而且我也贏了,如果你也放棄了'\ u0001- \ u0008','\ u000b','\ u000c'和'\ u000f- \ u001f',會損失多少。 '\ u0009'(TAB),'\ u000a'(CR)和'\ u000d'(LF)是唯一合理的ASCII控制字符。 – MSalters

4

我假設你需要可打印的ASCII而不僅僅是ASCII,所以你可能想限制自己到0x20噸hru 0x7e代碼點:

if (Regex.isMatch (str, @"[^\u0020-\u007E]", RegexOptions.None)) { 
    ... Show message box here ... 
    str = Regex.Replace (str, @"[^\u0020-\u007E]", string.Empty); 
} 

但我不相信消息框是正確的路要走。這可能會讓非常煩人。在表單上的某個地方有一個錯誤控制可能會更好,您可以在用戶輸入無效字符時將其設置爲錯誤消息(併發出嗶聲以讓他們知道)。當用戶輸入另一個(有效)字符時,將該控件重置爲空字符串。這似乎不那麼突兀。