Проверка того, что строка содержит только буквы в С#

Вопрос:

У меня есть строка ввода, и я хочу проверить, что она содержит:

  • Только буквы или
  • Только буквы и цифры или
  • Только буквы, цифры или символ подчеркивания

Чтобы уточнить, у меня есть 3 разных случая в коде, каждый из которых требует различной проверки. Какой самый простой способ добиться этого в С#?

Лучший ответ:

Только буквы:

Regex.IsMatch(input, @"^[a-zA-Z]+$");

Только буквы и цифры:

Regex.IsMatch(input, @"^[a-zA-Z0-9]+$");

Только буквы, цифры и подчеркивание:

Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$");

Ответ №1
bool result = input.All(Char.IsLetter);

bool result = input.All(Char.IsLetterOrDigit);

bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_');

Ответ №2

Только буквы:

Regex.IsMatch(theString, @"^[\p{L}]+$");

Буквы и цифры:

Regex.IsMatch(theString, @"^[\p{L}\p{N}]+$");

Буквы, цифры и подчеркивание:

Regex.IsMatch(theString, @"^[\w]+$");

Примечание. Эти шаблоны также соответствуют международным символам (в отличие от использования конструкции a-z).

Ответ №3

Для тех из вас, кто предпочитает не идти с Regex и находится на платформе .NET 2.0 (AKA no LINQ):

Только буквы:

public static bool IsAllLetters(string s)
{
foreach (char c in s)
{
if (!Char.IsLetter(c))
return false;
}
return true;
}

Только числа:

    public static bool IsAllDigits(string s)
{
foreach (char c in s)
{
if (!Char.IsDigit(c))
return false;
}
return true;
}

Только числа или буквы:

    public static bool IsAllLettersOrDigits(string s)
{
foreach (char c in s)
{
if (!Char.IsLetterOrDigit(c))
return false;
}
return true;
}

Только цифры или буквы или подчеркивания:

    public static bool IsAllLettersOrDigitsOrUnderscores(string s)
{
foreach (char c in s)
{
if (!Char.IsLetterOrDigit(c) && c != '_')
return false;
}
return true;
}

Ответ №4

Я считаю хорошим примером использования регулярных выражений:

public bool IsAlpha(string input)
{
return Regex.IsMatch(input, "^[a-zA-Z]+$");
}

public bool IsAlphaNumeric(string input)
{
return Regex.IsMatch(input, "^[a-zA-Z0-9]+$");
}

public bool IsAlphaNumericWithUnderscore(string input)
{
return Regex.IsMatch(input, "^[a-zA-Z0-9_]+$");
}

Ответ №5

Вы можете зацикливать на символах строки и проверить с помощью метода Char IsLetter
но вы также можете сделать трюк, используя метод String IndexOfAny, чтобы искать другие символы, которые не должны быть в строке.

Ответ №6

Итерации по строкам символов и использование функций ‘Char’, называемых ‘IsLetter’ и ‘IsDigit’.

Если вам нужно что-то более конкретное – используйте класс Regex.

Ответ №7

Если вы новичок, тогда вы можете взять ссылку из моего кода. Что я сделал, это поставить чек, чтобы я мог получить только алфавиты и пробелы! Вы можете повторить цикл for после второго оператора if, чтобы снова подтвердить строку

       bool check = false;

Console.WriteLine("Please Enter the Name");
name=Console.ReadLine();

for (int i = 0; i < name.Length; i++)
{
if (name[i]>='a' && name[i]<='z' || name[i]==' ')
{
check = true;
}
else
{
check = false;
}

}

if (check==false)
{
Console.WriteLine("Enter Valid Value");
name = Console.ReadLine();
}

Ответ №8

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

Я понял, что решения с регулярным выражением в 30 раз медленнее, чем решения с проверкой Char.IsLetterOrDigit.

Мы не были уверены, что эти буквы или цифры включают, и нам нужны были только латинские символы, поэтому мы реализовали нашу функцию на основе декомпилированной версии функции Char.IsLetterOrDigit.

Вот наше решение:

internal static bool CheckAllowedChars(char uc)
{
switch (uc)
{
case '-':
case '.':
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
return true;
default:
return false;
}
}

И использование так:

 if( logicalId.All(c => CheckAllowedChars(c)))
{ // Do your stuff here.. }

Ответ №9

Пожалуйста, найдите метод, чтобы проверить, является ли символ буквой, цифрой или пробелом, в противном случае приложите подчеркивание
(Будьте свободны для изменения в соответствии с вашими потребностями)

public String CleanStringToLettersNumbers(String data)
{
var result = String.Empty;

foreach (var item in data)
{
var c = '_';

if ((int)item >= 97 && (int)item <= 122 ||
(int)item >= 65 && (int)item <= 90 ||
(int)item >= 48 && (int)item <= 57 ||
(int)item == 32)
{
c = item;
}

result = result + c;
}

return result;
}

Оцените статью
TechArks.Ru
Добавить комментарий