Есть строка, в которой есть цифры, буквы и знаки препинания. Например: г. Москва, ул. Ленина д.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#-демо
Комментариев нет:
Отправить комментарий