检测字符串中的垃圾字符

时间:2011-08-31 08:10:18

标签: c# string

我想允许用户输入字符,数字和特殊字符,但不允许输入ascii值大于127的JUNK字符(例如♠♣等)。

我有这样的功能

            for (int i = 0; i < value.Length; i++) // value is input string
            {
                if ((int)value[i] < 32 || (int)value[i] > 126)
                {

                         // show error

                 }

            }

这会使代码变慢,因为我必须比较每个字符串及其字符。 任何人都可以提出更好的方法吗?

2 个答案:

答案 0 :(得分:8)

嗯,首先,你可以使代码更简单

foreach (char c in value)
{
    if (c < 32 || c > 126)
    {
        ...
    }
}

或者使用LINQ,如果您只需要知道任何字符是否为非ASCII:

bool bad = value.Any(c => c < 32 || c > 126);

...但从根本上说,如果不迭代字符串中的每个字符,你将无法检测到非ASCII字符......

答案 1 :(得分:1)

您可以制作允许所有所需字符的正则表达式,并将其用于每个字符串。我认为这会提高性能。您所要做的就是创建一个正确的正则表达式。

更新但是,使用RegEx不会提高速度,只会最小化代码行。