2017-08-08 220 views
1

我在js中有一個字符串條件,我必須檢查在文本框中輸入的名稱是否僅包含一個空格。只有一個空格匹配名稱的正則表達式

pattern: name.status === 'full_name' ? /^[a-zA-Z.+-.']+\s+[a-zA-Z.+-. ']+$/ : /^[a-zA-Z.+-. ']+$/ 

但上述正則表達式匹配的名字也以2個空格結尾。

我需要匹配它,以便輸入的名稱只能接受一個名稱字符串空間。所以這個名字在中間或末尾只有一個空格。

回答

0

兩個觀察:1)\s+在模式匹配1個或多個空格,和2)[+-.]比賽4個字符:+,-.,它因此最好把連字符在字符類的端。

您可以使用

/^[a-zA-Z.+'-]+(?:\s[a-zA-Z.+'-]+)*\s?$/ 

regex demo

詳細

  • ^ - 1個或多個字母,.,- 串
  • [a-zA-Z.+'-]+開始 -,'-
  • (?:\s[a-zA-Z.+'-]+)*的零個或更多序列:
    • \s - 一個單一的空白
    • [a-zA-Z.+'-]+ - 1個或多個字母,.+'-字符
  • \s? - 可選空白
  • $ - 字符串結尾。

注:如果在「名稱」不能包含.+,只是從你的字符類刪除這些符號。

+0

,如果我給的全名跟一個空格結尾不流通。需要接受只接受中間或末尾一個空格的名字。也不匹配2個字符串的名稱。 – rubyist

+0

@rubyist所以,可以有2個空格? –

+0

是的。我的意思是說,對於名稱字符串,最多允許1個空格。所以帶空間的「Alex」,帶空間的「Alex Christop」和帶空間的「Alex Christop David」都可以。 – rubyist

0
/^\S+\s\S+$/ 

試試這個

幾點說明:

  • ^- 字符串的開始
  • \ S - 一個空格
  • \ S - 一切,除了空白
  • 「+」 - 量詞「一個或多個」
  • $ - 結束o f字符串
+0

'\ s'等於'[\ r \ n \ t \ f \ v]',它也與'line return'匹配... – Hitmands

+0

如果\ n中沒有'\ n'這個值,這不是問題(但是,是匹配換行符);所以請使用'/^[^ \ t] + [\ t] [^ \ t] + $ /'之類的東西 – NatNgs

0

你也可以使用單詞邊界...

function isFullName(s) { 
 
    
 
    return /^\b\w+\b \b\w+\b$/.test(s); 
 
} 
 

 

 

 
['Giuseppe', 'Mandato', 'Giuseppe Mandato'] 
 
    .forEach(item => console.log(`isFullName ${item} ? ${isFullName(item)}`))