字符串需要包含2个单词

时间:2016-04-21 18:35:25

标签: c# asp.net-mvc-5

我的一个观点上有一个文本框,该文本框不应该接受任何超过2个单词或少于2个单词的内容。这个文本框需要2个单词。

这个文本框基本上接受一个人的名字和姓氏。我不希望人们只输入其中一个。

有没有办法检查2个字和另一个space字符之间的space字符以及第二个字后面的任何letternumber等字符存在?我认为如果用户在第二个单词之后意外地“胖手指”一个额外的空格,那应该很好,但仍然只有2个单词。

例如:

/* the _ character means space */

John               /* not accepted */

John_              /* not accepted */

John_Smith_a       /* not accepted */

John Smith_        /* accepted */

感谢任何帮助。

6 个答案:

答案 0 :(得分: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)

A"字"字符\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
} 

答案 1 :(得分:2)

像这样使用

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

答案 2 :(得分: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; }
}

答案 3 :(得分:0)

最干净的方法是使用正则表达式IsMatch方法,如下所示:

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

如果输入匹配,则返回true

答案 4 :(得分:0)

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

由于我对正则表达式的了解非常有限,我相信这将解决您的问题。

答案 5 :(得分:0)

试试这个

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

str是保存字符串以进行比较的变量