Проверить содержимое строки ввода

Как я могу проверить, является ли мой ввод определенным видом строки. Так что ни цифра, ни "/",...

5 ответов

Решение

Ну, чтобы проверить, что вход на самом деле является объектом типа System.StringВы можете просто сделать:

bool IsString(object value)
{
    return value is string;
}

Чтобы проверить, что string содержит только буквы, вы можете сделать что-то вроде этого:

bool IsAllAlphabetic(string value)
{
    foreach (char c in value)
    {
        if (!char.IsLetter(c))
            return false;
    }

    return true;
}

Если вы хотите объединить их, вы можете сделать это:

bool IsAlphabeticString(object value)
{
    string str = value as string;
    return str != null && IsAllAlphabetic(str);
}

Если вы имеете в виду "это строка букв полностью", вы можете сделать:

string myString = "RandomStringOfLetters";
bool allLetters = myString.All( c => Char.IsLetter(c) );

Это основано на LINQ и методе Char.IsLetter.

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

string s = "dasglakgsklg";
if (Regex.IsMatch(s, "^[a-z]+$", RegexOptions.IgnoreCase))
{
    Console.WriteLine("Only letters in a-z.");
}
else
{
    // Not only letters in a-z.
}

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

Вы также можете использовать \p{L} вместо [a-z] соответствовать любому символу Unicode, который считается буквой, включая буквы в иностранных алфавитах.

using System.Linq;
...

bool onlyAlphas = s.All(c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));

Нечто подобное (не проверенное) может соответствовать вашим (расплывчатым) требованиям.

if (input is string)
{
    // test for legal characters?
    string pattern = "^[A-Za-z]+$";
    if (Regex.IsMatch(input, pattern))
    {
         // legal string? do something 
    }

    // or
    if (input.Any(c => !char.IsLetter(c)))
    {
         // NOT legal string 
    }
}
Другие вопросы по тегам