Обнаружение нежелательных символов в строке

98
11

Я хочу разрешить пользователю вводить символы, цифры и специальные символы, но не символы JUNK (например, ♠ ♣ и т.д.), значение 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

}

}


Это делает бит кода медленнее, поскольку мне приходится сравнивать каждую строку и ее характер.
Может ли кто-нибудь предложить лучший подход?

спросил(а) 2011-08-31T11:10:00+04:00 9 лет назад
1
Решение
120

Ну, с одной стороны, вы можете сделать код проще:


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

Или используя LINQ, если вам просто нужно знать, не являются ли какие-либо символы не ASCII:

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

... но в принципе вы не сможете обнаружить символы, отличные от ASCII, без повторения каждого символа в строке...

ответил(а) 2011-08-31T11:13:00+04:00 9 лет назад
57

Вы можете сделать регулярное выражение, которое разрешало бы все нужные символы и использовало его для каждой строки. Я думаю, что это улучшит производительность. Все, что вам нужно сделать, это создать правильное регулярное выражение.

Обновление: Однако использование RegEx не улучшит скорость, а просто скроет строки кода.

ответил(а) 2011-08-31T11:14:00+04:00 9 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема