2016-06-02 7 views
0

Я знаю, что это было задано раньше, но мой код не работает.Check String Only Contain Characters

Сенарио - мне нужно проверить, содержит ли строка только буквы, цифры и пробелы. Мне нужно провалиться, если в нем есть что-то еще.

Я пробовал метод RegEx, но я не понимаю регулярные выражения, поэтому мне нужно использовать метод LINQ для моей оценки.

Вот мой код:

if (!CSVItemArray[count].All(Char.IsLetterOrDigit) && !CSVItemArray[count].Contains(" ")) 
{ 
    return false; 
} 
+0

Является ли 'CSVItemArray' массивом строк? – ChrisF

+0

@ChrisF Да, это так. – Smithy

+0

* поэтому мне нужно использовать метод LINQ для моей оценки * ... Что LINQ имеет отношение к проверке типов символов? – sstan

ответ

1

делать что-то (например, с помощью Regex), потому что не понимает, что это плохо - по крайней мере, для разработчиков. В частности, если то, что вы хотите сделать, может быть легко достигнуто с помощью регулярного выражения.

Сказав это, вы можете просто использовать это:

Regex r = new Regex("^[A-Za-z0-9\\s]*$"); 
var valid = r.IsMatch(myString); 

Это будет искать любое количество заглавных и строчных букв, цифр и пробелов-символов. Сама последовательность охватывает [], следующее * устанавливает количество повторений последовательности в строке (в вашем случае нет uo до бесконечности). ^ и $ предназначены только для повторного воспроизведения начала и конца строки. Это позволяет избежать того, что %asdfgh12345 // будет соответствовать, например.

EDIT: Если вам нужны Umlauts также (ä, ö, ü, ß, ...), вы можете взглянуть на this post, который также обрабатывает специальные символы.

+0

Хорошая точка. В вашем регулярном выражении не указывается äöüß и эти буквы. Но ОП не уточнил, что делает для него письмо. –

+0

@ RenéVogt Справедливая точка, я добавил обновление. – HimBromBeere

+0

@HimBromBeere _ «Делая что-то [...], потому что не понимаю, что это плохо ...» _ Я определенно согласен с этим. Я узнаю, как работает Regex, но если я использую его в своей оценке, я должен буду объяснить, что он делает, и мой наставник не научил меня этому, так что это не пойдет хорошо. – Smithy

3

Просто объединить чек на букву, цифру или пробел в All запросе:

if (!CSVItemArray[count].All(c => Char.IsLetterOrDigit(c) || Char.IsWhiteSpace(c))) 
{ 
    return false; 
} 
2

Ваша логика немного запутался. Следующие возвращает true, если строка в CSVItemArray[count] содержит только буквы, цифры и пробелы:

return CSVItemArray[count].All(c => Char.IsLetterOrDigit(c) || Char.IsWhiteSpace(c)); 
+0

Это логическая функция проверки, если она не соответствует моему условию, она возвращает false. – Smithy

+0

@ Смити, да, это то, что он делает. Я сказал, что он возвращает true, если он содержит _ «только буквы, цифры и пробелы» _, поэтому он возвращает падение, если есть что-то другое. Код проверяет, что в строке строки _All'_ находятся буквы, цифры или пробелы. –