Обнаружение нежелательных символов в строке
Я хочу разрешить пользователю вводить символы, цифры и специальные символы, но не символы 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
}
}
Это делает бит кода медленнее, поскольку мне приходится сравнивать каждую строку и ее характер.
Может ли кто-нибудь предложить лучший подход?
Ну, с одной стороны, вы можете сделать код проще:
foreach (char c in value)
{
if (c < 32 || c > 126)
{
...
}
}
Или используя LINQ, если вам просто нужно знать, не являются ли какие-либо символы не ASCII:
bool bad = value.Any(c => c < 32 || c > 126);
... но в принципе вы не сможете обнаружить символы, отличные от ASCII, без повторения каждого символа в строке...
Вы можете сделать регулярное выражение, которое разрешало бы все нужные символы и использовало его для каждой строки. Я думаю, что это улучшит производительность. Все, что вам нужно сделать, это создать правильное регулярное выражение.
Обновление: Однако использование RegEx не улучшит скорость, а просто скроет строки кода.