Есть несколько подходов, которые можно использовать, чтобы решить эту проблему, я рассмотрю в течение нескольких.
Использование метода String.Split()
Вы можете использовать метод String.Split()
, чтобы разбить строку на это отдельные компоненты, основанные на разделителем. В этом случае, вы можете использовать пробел в качестве разделителя, чтобы получить отдельные слова:
// Get your words, removing any empty entries along the way
var words = YourTextBox.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
// Determine how many words you have here
if(words.Length != 2)
{
// Tell the user they made a horrible mistake not typing two words here
}
с помощью регулярных выражений
Кроме того, вы можете попытаться решить эту проблему с помощью регулярных выражений с помощью Regex.IsMatch()
метод:
// Check for exactly two words (and allow for beginning and trailing spaces)
if(!Regex.IsMatch(input,@"^(\s+)?\w+\s+\w+(\s+)?"))
{
// There are not two words, do something
}
само выражение может выглядеть немного страшно, но она может быть разбита следующим образом:
^ # This matches the start of your string
(\s+)? # This optionally allows for a single series of one or more whitespace characters
\w+ # This allows for one or more "word" characters that make up your first word
\s+ # Again you allow for a series of whitespace characters, you can drop the + if you just want one
\w+ # Here's your second word, nothing new here
(\s+)? # Finally allow for some trailing spaces (up to you if you want them)
Символ «слово» \w
- это специальный символ в регулярных выражениях, который может представлять цифру, букву или знак подчеркивания и эквивалент [a-zA-Z0-9_]
.
Использование преимуществ регулярных выражений с использованием MVC в RegularExpressionAttribute
Наконец, так как вы используете MVC, вы можете воспользоваться атрибутом [RegularExpressionValidation]
на самой модели:
[RegularExpression(@"^(\s+)?\w+\s+\w+(\s+)?", ErrorMessage = "Exactly two words are required.")]
public string YourProperty { get; set; }
Это позволит вам просто вызовите ModelState.IsValid
в рамках действия вашего контроллера, чтобы узнать, есть ли у вашей модели какие-либо ошибки или нет:
// This will check your validation attributes like the one mentioned above
if(!ModelState.IsValid)
{
// You probably have some errors, like not exactly two words
}
Что о выражении, которое соответствует чему-то вроде 'Cpl \ 3 John Smith' или' Mr. Джон Смит? У меня есть '@"^(\ s +)? [A-Za-z_.-] + \ s \ w + \ s \ w + (\ s +)? $ "' –
Вы хотите разрешить их в дополнение к вашему предыдущему случаю или как совершенно отдельный набор? Поскольку они технически состоят из трех слов. –
Да, в дополнение к моему предыдущему случаю. 3 - максимальный и минимальный –