Codeby web-security - новый курс от Codeby Security School

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...


Как найти английские буквы в тексте?

Не давно мне попалась задача, в которой требовалось найти английские буквы в переданном в метод фрагменте текста. Задача довольно простая и есть несколько способов её решения, некоторые из которых я хочу показать в этой статье.

И так, предположим, что нам дана строка, которая содержит следующий текст:

string str = "Я drink 526 coffee в машине";

В качестве задачи нам нужно найти все английские буквы в данной строке и поместить их, к примеру, в какой-нибудь массив или список.

Переходим к решению. Как Вы, наверное, знаете, в языке c# любая строка представляет собой набор символов, это значит что приведенную строку, мы можем представить себе следующим образом:

char [] str = {'Я','','d','r','i','n','k', ... };

Чтобы найти английские буквы нам нужно создать массив, который содержит все буквы английского алфавита, и сравнить каждый символ данной нам строки с каждым элементом созданного массива, например это можно сделать следующим образом:

string str = "Я drink 526 coffee в машине";
//все английские буквы
List<char> engLellers = new List<char> {'a','b','c','d', ...};
//список найденных букв
List<char> foundLellers = new List<char>();
foreach(char ch in str.ToLowerInvariant())
{
if (Char.IsLetter(ch) & engLellers.Contains(ch))
{
foundLellers.Add(ch);
}
}

результат

1

С помощью метода IsLetter мы определяем, является ли текущий символ буквой, если нет, то пропускаем его.


Paranoid - курс от Codeby Security School

Представляем вашему вниманию курс от команды codeby - "Комплекс мер по защите персональных данных, анонимности в интернете и не только" Подробнее ...


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

foundLellers = str.ToLowerInvariant().Where(x =>
Char.IsLetter(x) & engLellers.Contains(x)).ToList();

Получаем тот же самый результат.

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

Решение на самом деле очень простое. В одной из предыдущих статей, я рассказывал, как можно быстро получить все буквы русского и английского алфавита. Этот же способ мы можем использовать и при решении данной задачи, например:

foundLellers = str.ToLowerInvariant().Where(x =>
Char.IsLetter(x) & (int)x >= 97 & (int)x  122).ToList();

Результат будет тот же самый.

На этом всё, если вопросы по теме, то оставляйте их в комментариях.

Читайте также:


Codeby Market от Сodeby

Мы запустили свой магазин CodebyMarket Equipment for InfoSec. Уже добавили RaspberryAlfa Long-RangeOrange PiArduino и многое другое. Купить Pentesting Devices