2014-12-06 86 views
0

我正在用正則表達式來度過一段非常艱難的時光。我正在導致我的單元測試失敗。我嘗試了幾種不同的方式,但沒有成功。也許我錯了。我需要它使用一個詞(小號)或兩個詞與一個空間(法國號角)。正則表達式導致我的失敗單元測試。爲什麼?

說我有一個問題,物業。

public string Name 
    { 
     get { return _name; } 
     set 
     { 
      string source = propTI.ToTitleCase(value.Trim()); 
      string pattern = "^[A-Z][a-z]*\\s[A-Z][a-z]*$"; 
      if (Regex.IsMatch(source, pattern)) 
       _name = source; 
      else 
      { 
       throw new ArgumentException("Name must have proper case!"); 
      } 
     } 
    } 

我也嘗試 「^([A-Z] [A-Z] \ S) $」 作爲圖案。

構造:

public Instrument() : this(DefaultName, DefaultCategory) { } 

單元測試:

[TestMethod] 
    public void Instrument_Name_IsValid() 
    { 
     var na = "french"; 
     var goodna = "French"; 
     var inst = new Instrument(); 
     inst.Name = na; 
     Assert.AreEqual(goodna, inst.Name); 
    } 

我應該使用什麼的正則表達式?由於這些顯然不起作用?

+0

這個問題可能是強制性的空間'\ s' – 2014-12-06 16:44:05

+0

我認爲這可能是一個問題。你怎麼做一個「可能」或有時候空間? – Shades9323 2014-12-06 16:45:17

+3

像這樣:'^ [A-Z] [A-Z] *?(?:\\ S [A-Z] [A-Z] *)$'或與'*'代替'',以允許兩個以上的字。 – 2014-12-06 16:47:07

回答

1

卡西米爾等伊波利特了答案:

^[A-Z][a-z]*(?:\\s[A-Z][a-z]*)*$ 
相關問題