2010-07-20 3 views
5

Как проверить, является ли мой ввод конкретным типом строки. Поэтому нет числовых, нет «/», ...проверить содержимое ввода строки

+0

D o Вы случайно можете обозначить букву (буквы) вместо строки? – BoltClock

+1

Вы имеете в виду «Как проверить, содержит ли строка только символы?» –

+1

Вы имеете в виду строку, состоящую только из буквенно-цифровых символов? Можете ли вы точно определить символы? –

ответ

15

Ну, проверить, что вход на самом деле является объектом типа 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); 
} 
+1

Хороший пример того, что название и вопрос точно не совпадают. – corsiKa

6

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

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], чтобы соответствовать любому символу Юникода, который считается буквой, включая буквы в иностранных алфавитах.

1

Что-то вроде этого (не проверено) может соответствовать вашему (неопределенному) требованию.

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 
    } 
} 
2
using System.Linq; 
... 

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

+1 для не использования регулярных выражений! – Aren

+1

-1 за зверство – Luiscencio

+0

Не поймите меня неправильно: регулярное выражение имеет свои применения. Но для простого, однопроходного алгоритма, подобного этому, он переборщил. Мне больше нравится ответ Рида. Не знал о 'Char.IsLetter'. – StriplingWarrior

10

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

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

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

+1

это круто =) – Luiscencio

+0

Как Char.IsLetter работает с локализацией? – ahsteele

+0

@ahsteele: Это на самом деле System.Globalization.CharUnicodeInfo для обработки этого для не-латинских символов. –

Смежные вопросы