我正在创建一个将输入字符串发送到移动设备的应用程序。某些设备在编码特殊字符时遇到问题,因此我想创建一个过滤器,该过滤器不允许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符号?
谢谢!
答案 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