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

Вопрос:У меня есть строка ввода, и я хочу проверить, что она содержит: Только буквы или Только буквы и цифры или Только буквы, цифры или символ подчеркивания Чтобы уточнить, у меня есть 3 разных случая в коде, каждый из которых требует различной проверки. Какой самый простой способ добиться этого в С#? Лучший ответ: Только буквы: Regex.IsMatch(input,

Вопрос:

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

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

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

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

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

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

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

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

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

Regex.IsMatch(input, @»^[a-zA-Z0-9_]+$»); Ответ №1bool 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; }

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