2016-04-21 5 views
-1

У меня есть текстовое поле на одном из моих представлений и что текстовое поле не должно принимать ничего, что имеет более 2 слов или менее 2 слов. Это текстовое поле требует 2 слова.Строка должна содержать 2 слова

В основном это текстовое поле принимает имя и фамилию человека. Я не хочу, чтобы люди только вводили то или другое.

Есть ли способ, чтобы проверить наличие space характера между 2-х слов и другого space характера наряду с любыми letter, number и т.д. после 2-го слова, если оно существует? Я думаю, что если пользователь случайно «жир-пальцы» добавит лишнее пространство после второго слова, это должно быть хорошо, bc еще осталось всего 2 слова.

Например:

/* the _ character means space */ 

John    /* not accepted */ 

John_    /* not accepted */ 

John_Smith_a  /* not accepted */ 

John Smith_  /* accepted */ 

Любая помощь приветствуется.

ответ

5

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

Использование метода 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 
} 
+0

Что о выражении, которое соответствует чему-то вроде 'Cpl \ 3 John Smith' или' Mr. Джон Смит? У меня есть '@"^(\ s +)? [A-Za-z_.-] + \ s \ w + \ s \ w + (\ s +)? $ "' –

+0

Вы хотите разрешить их в дополнение к вашему предыдущему случаю или как совершенно отдельный набор? Поскольку они технически состоят из трех слов. –

+0

Да, в дополнение к моему предыдущему случаю. 3 - максимальный и минимальный –

2

использовать его, как это

string s="John_Smith_a" 
if (s.Trim().Split(new char[] { ' ' }).Length > 1) 
{ 
} 
0

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

Regex.IsMatch("One Two", @"^\w+\s\w+\s?$") 

Возвращает true, если вход матч.

0
Match m = Regex.Match(this.yourTextBox.Text, @"[^\w\s\w$]", String.Empty); 
if (m.Success) 
    //do something 
else 
    //do something else 

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

0

Попробуйте

if (str.Split(' ').Length == 2) 
{ 
    //Do Something 
} 

ул переменная держит вашу строку для сравнения

1

Тег подразумевает MVC, поэтому я бы рекомендовал использовать RegularExpressionAttribute класс:

public class YourModel 
{ 
    [RegularExpression(@"[^\w\s\w$]", ErrorMessage = "You must have exactly two words separated by a space.")] 
    public string YourProperty { get; set; } 
} 
Смежные вопросы