如果客户端包含两个或更多单词,请使用RegularExpression检查客户端上的webform

时间:2018-05-23 12:27:31

标签: c# .net regex

我正在尝试让RegularExpression在我的webform(在MVC中工作)在客户端工作,以便验证用户输入两个或更多单词。因为它的名字和姓氏我希望它接受像“åäö”这样的字母(不一定只是åäö,所有的字母都很好)。

我做了这段代码:

[Required(ErrorMessage = "Du måste fylla i ditt namn"),
 RegularExpression(@"^[A-Za-z]*(\s[A-Za-z]*)+$", ErrorMessage = "Du måste skriva både för- och efternamn"),
 Display(Name = "Namn")]
 public string Name { get; set; }

我知道上面的代码只接受A-Z,这对我来说是个问题。我尝试了这样但它仍然没有传递像“ÖrjanSörensson”这样的名字:

RegularExpression(@"((^[\w]*\s[\w]*).*)+$", ErrorMessage = "Du måste skriva både för- och efternamn"),

我正在寻找的结果是:

  • “Olle Svensson”=>通过
  • “ÅsaÄng”=>通
  • “SörenHöre”=>通过
  • “Olle”=>失败
  • “Åsa”=>失败

1 个答案:

答案 0 :(得分:0)

初始范围[A-Za-z]似乎不够宽(因为您的字母带有变音符号,如Å,{{1} });尝试匹配任何字母的Ä

\p{L}

结果

  string[] tests = new string[] {
     "Olle Svensson",
     "Åsa Äng",
     "Sören Höre",
     "Olle ",           // should fail: one word only followed by space
     "Åsa",             // should fail: one word only
     "Örjan Sörensson"
  };

  string pattern = @"^\p{L}+(\s+\p{L}+)+$";

  var results = tests
    .Select(test => $"{test,-20} {(Regex.IsMatch(test, pattern) ? "Pass" : "Fail")}");

  Console.Write(string.Join(Environment.NewLine, results));

所以属性可以是

Olle Svensson        Pass
Åsa Äng              Pass
Sören Höre           Pass
Olle                 Fail
Åsa                  Fail
Örjan Sörensson      Pass