Страницы

Поиск по вопросам

среда, 12 июня 2019 г.

Строка не содержит управляющих ASCII символов

Есть строка, в которой есть цифры, буквы и знаки препинания. Например: г. Москва, ул. Ленина д.5. Надо проверить, есть ли в ней символы, относящиеся к управляющим символам ASCII таблицы(коды с 0х00 до 0х1F и 0x7F).
Вообще не могу понять как в моей строке искать эти символы. Не перечислять же мне их вручную, а потом посимвольно сравнивать...


Ответ

Надо проверить, есть ли в ней символы, относящиеся к управляющим символам ASCII таблицы(коды с 0х00 до 0х1F).
Char.IsControl тут не подойдёт, так как этот метод проверяет также наличие управляющих символов всей таблицы Юникода.
Нужно использовать LINQ. s.Any(c => (c >= 0 && c <= 31) || c == 127) проверит наличие требуемых символов в тексте, а s.Where(c => (c >= 0 && c <= 31) || c == 127).ToList() вернёт их список:
var s = "\x08

"; var result = s.Any(c => (c >= 0 && c <= 31) || c == 127); Console.WriteLine(result); // => True var result2 = s.Where(c => (c >= 0 && c <= 31) || c == 127).ToList(); Console.WriteLine("'{0}'", string.Join("';'", result2));
Result:
True '';' ';' ';' '
См. демо
Можно и регулярным выражением:
var hasAsciiControlChr = Regex.IsMatch(s, @"[\u0000-\u001F\u007F]");
См. C#-демо

Комментариев нет:

Отправить комментарий