Відповіді:
Тільки літери:
Regex.IsMatch(input, @"^[a-zA-Z]+$");
Тільки літери та цифри:
Regex.IsMatch(input, @"^[a-zA-Z0-9]+$");
Тільки літери, цифри та підкреслення:
Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$");
bool result = input.All(Char.IsLetter);
bool result = input.All(Char.IsLetterOrDigit);
bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_');
Regex
для всіх літер, і в 3 рази швидше, ніж Regex
для всіх літер з IgnoreCase
опцією (!).
Листи лише:
Regex.IsMatch(theString, @"^[\p{L}]+$");
Літери та цифри:
Regex.IsMatch(theString, @"^[\p{L}\p{N}]+$");
Букви, цифри та підкреслення:
Regex.IsMatch(theString, @"^[\w]+$");
Зауважте, ці зразки також відповідають міжнародним символам (на відміну від використання a-z
конструкції).
Для тих із вас, хто бажає не їздити з Regex і перебувати на .NET 2.0 Framework (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;
}
Я думаю, що це гарний випадок для використання регулярних виразів:
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_]+$");
}
Ви можете зациклитися на символах рядка і перевірити за допомогою методу Char IsLetter, але ви також можете зробити трюк, використовуючи метод String IndexOfAny для пошуку інших символів, які, мабуть, не знаходяться в рядку.
Ітерація через символи рядків та використання функцій 'Char' під назвою 'IsLetter' та 'IsDigit'.
Якщо вам потрібно щось більш конкретне - використовуйте клас Regex.
Якщо ви новачок, то ви можете взяти посилання з мого коду .. що я зробив, щоб поставити чек, щоб я міг отримати лише алфавіти та пробіли! Ви можете повторити цикл for після другого, якщо оператор знову підтвердить рядок
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;
break;
}
}
if (check==false)
{
Console.WriteLine("Enter Valid Value");
name = Console.ReadLine();
}
Нещодавно я здійснив поліпшення продуктивності функції, яка перевіряє букви в рядку за допомогою цієї сторінки.
Я зрозумів, що рішення з регулярним виразом в 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.. }
Будь ласка, знайдіть спосіб перевірки, якщо знаком є літера, цифра чи пробіл, інакше додайте підкреслення (Будьте вільні до модифікації відповідно до ваших потреб)
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;
}