2015-11-09 38 views
-1

我有一個ASP.NET MVC應用程序,它包含一個名爲'First/last name'的表單字段。我需要添加一些基本驗證,以確保人們輸入至少兩個單詞。它不需要在檢查字長等方面全面全面,我們基本上只需要防止人們輸入他們的名字,這是目前正在發生的事情。我不想僅限於字母字符,因爲某些名稱包含標點符號。我只想確保人們至少輸入了兩個用空格分隔的單詞。正則表達式匹配多個單詞

我目前有以下的正則表達式:

[RegularExpression(@"^((\b[a-zA-Z]{2,40}\b)\s*){2,}$", ErrorMessage = "Invalid first/last name")] 

此作品在一定程度上(它檢查2個字),但如果輸入標點符號,這是不是我要找的是無效的。

任何人都可以建議如何修改上面的內容,以便在單詞中使用標點符號時無關緊要嗎?我對正則表達式語法不太好,因此在這裏問。

謝謝。

+0

爲什麼downvote?酸葡萄? – Dan

回答

1

你想要兩個單詞,所以他們之間至少有一個空格,除此之外,你想允許所有的東西(例如標點符號)。所以,保持簡單:

\w.*\s.*\w 

或者,如果你必須錨它開始和結束:

^.*\w.*\s.*\w.*$ 

這些都會匹配,例如,D' Addario(但不D'Artagnan本身,因爲它計算作爲空間標準的一個詞)。

+0

這會超過2個字嗎? – Dan

+0

是的。它尋找兩個單詞字符和它們之間的某個空間,但是在它們之間或周圍接受_anything_,包括更多的單詞和空格。 – alexis

+0

這個正則表達式允許一個字符串以空格開頭。 –

0

也許只是:

@"\w\s\w" 

wordwhite spaceword

+0

這會超過2個字嗎? – Dan

+0

這不符合D. Knuth',例如。 – alexis

+1

它不會在'RegularExpression'屬性中工作,因爲它需要完整的字符串匹配。 –

0

如果你只想讓後面的空白字符1個或多個序列後跟非空格字符的非空白字符的序列,您可以使用

^\s*\S+(?:\s+\S+)+\s*$ 

請參閱regex demo

它不會只接受FirstFirst

Regex的擊穿:

  • ^ - 串
  • 的開始
  • \s* - 零個或多個空白
  • \S+ - 1或多個非空白符號
  • (?:\s+\S+)+ - 的1個或多個序列。 ..
    • \s+ - 1 o ř多個空格序列(除去+允許字之間只有1空白)
    • \S+ - 1或多個非空白符號
  • \s* - 零個或多個空白
  • $ - 串的端
+0

這會超過2個字嗎? – Dan

+0

當然,由於「+」量詞意味着* 1或**更多**出現次數*。按照答案中的演示鏈接查看包含幾個「單詞」並用空格分隔的演示字符串。如果您需要在「單詞」之間限制爲* 1空格*,請將[\ s'後面的'+'刪除(https://regex101.com/r/kA5bF5/2)。 –

+0

'david o'connor'返回無效,這是不可取的。 – Dan