检测字符串中的垃圾字符

本文关键字:字符 字符串 检测 | 更新日期: 2023-09-27 18:07:01

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

我有这样的函数

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

这会使代码变慢,因为我必须比较每个字符串和它的字符。有谁能提出更好的方法吗?

检测字符串中的垃圾字符

首先,您可以使代码更简单:

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

或者使用LINQ,如果你只需要知道是否有任何字符是非ascii:

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

…但如果不遍历字符串中的每个字符就无法检测非ascii字符

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

Update:然而,使用RegEx不会提高速度,它只会减少代码行。