Подтвердить что ты не робот

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

Есть ли альтернатива использованию регулярного выражения, чтобы определить, содержит ли строка символы верхнего регистра? В настоящее время я использую следующее регулярное выражение:

Regex.IsMatch(fullUri, "[A-Z]") 

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

4b9b3361

Ответ 1

Вы можете использовать LINQ:

fullUri.Any(c => char.IsUpper(c));

Ответ 2

RegEx, похоже, переборщик:

bool containsAtLeastOneUppercase = fullUri.Any(char.IsUpper);

Ответ 3

Используйте Linq!

fullUri.Any(c=> char.IsUpper(c));

Ответ 4

Возможно, вы также можете сделать (если вы хотите что-то, что будет работать в .NET 1.0:):

bool hasUpperCase = !fullUri.ToLower().Equals(fullUri);

Хотя регулярное выражение это просто, вероятно, отлично работает

Ответ 5

Ваше регулярное выражение будет находить только буквы ASCII заглавной буквы. Удобно, что механизм регулярных выражений .NET поддерживает Unicode, что позволяет вам делать

Regex.IsMatch(fullUri, @"\p{Lu}") 

хотя я полагаю, что в вашем случае вы не ожидаете буквы, отличные от ASCII, в вашей строке (учитывая его название).

Ответ 6

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

int counter = 0;
for(int i=0; i< myString.Length;i++)
    {
        //if character is upper add +1 to counter
        if(char.IsUpper(chaineNonPascale[i]))
        {
            counter++;
        }
    }

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