字符串过滤器:检测非ASCII标志

时间:2010-01-04 13:34:44

标签: .net string encoding

我正在创建一个将输入字符串发送到移动设备的应用程序。某些设备在编码特殊字符时遇到问题,因此我想创建一个过滤器,该过滤器不允许PC上的用户输入特殊字符。

应用程序是用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符号?

谢谢!

3 个答案:

答案 0 :(得分:6)

你可以做到:

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

我不确定你是否真的只想删除输入的最后一个字符 - 考虑剪切并粘贴整个非ascii字符串......

答案 1 :(得分:4)

我假设您需要可打印的ASCII而不仅仅是ASCII,因此您可能希望将自己限制为0x20至0x7e代码点:

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

但我不相信消息框是正确的方法。这可能会让非常烦人。在用户输入无效字符时,您可以在某个地方设置错误控件,以便设置为错误消息(并发出哔哔声让他们知道)。当用户输入另一个(有效)字符时,将该控件重置为空字符串。这似乎远不那么突兀。

答案 2 :(得分:2)

这是一个正则表达式选项(使用System.Text.RegularExpressions

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