2012-07-17 28 views
2

我想寫一個正則表達式,以檢查是否用戶插入由至少一個空的空間分開的至少兩個詞:的regexp用於檢查全名

實施例:

var regexp = new RegExp(/^[a-z,',-]+(\s)[a-z,',-]+$/i); 

regexp.test("D'avid Camp-Bel"); // true 
regexp.test("John ---"); // true // but it should be false! 
+3

而[你嘗試]什麼(HTTP:// whathaveyoutried .com) – 2012-07-17 12:34:31

+0

答案提示:'var regexp =/^ [az] + \ s [az] + $/i;'(一個答案必須解釋這種模式) – 2012-07-17 12:35:45

+0

'\ w' - 是命名變量的任何符號,像[a-zA-Z0-9_] – gaussblurinc 2012-07-17 12:36:57

回答

8

請問^[a-z]([-']?[a-z]+)*([a-z]([-']?[a-z]+)*)+$是否適合您?

[a-z]確保名稱始終以字母開頭,然後[-']?[a-z]+允許分隔字符,只要其後至少有另一個字母。 *允許任何數量的這些部分。

下半年,([a-z]([-']?[a-z]+)*)匹配一個空格,後跟另一個相同模式的名稱。 +確保至少有一個附加名稱存在,但允許更多。 ({1,2}可以,如果你想只允許兩個或三個部分名稱中使用

+0

是的,非常完美,謝謝 – js999 2012-07-17 14:35:32

0

兩三指出:

  1. 在JavaScript中它通常最好使用文字,而不是命名的構造函數(所以/pattern/而不是new RegExp()(當然,有些時候,你需要的。構造函數路由)。

  2. 如果你使用的構造,在正則表達式的情況下,你不需要提出了界定斜槓

  3. 您當前的模式只有第一個字

  4. {1,}可以與寫相匹配修改+

嘗試

/^([a-z']+(-|)?)+$/i 

注意姓氏允許雙桶姓氏。

+1

你忘了「David Campt Junior」。我認爲'/ ^([a-z] +( - |)?)+ $/i'很適合 – madfriend 2012-07-17 12:42:07

+0

但你的情況'David ----'是名字。在我的'大衛 - '是名字,所以這兩個正則表達式都不完美。 – madfriend 2012-07-17 12:43:44

+1

+1。編輯 - ta。我錯誤地認爲他想匹配兩個名字,但他實際上說「至少有兩個」。 – Utkanos 2012-07-17 12:48:50

1

這個答案還支持Unicode字符

^[\p{L}]([-']?[\p{L}]+)*([\p{L}]([-']?[\p{L}]+)*)+$ 
+0

JS不支持'\ p {L}'... – Jerry 2017-11-13 11:19:27

0
/^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$/g 
+1

請改善您的答案並提供更多詳細信息和示例 – aberna 2017-11-13 10:51:32