2017-04-19 143 views
0

我有這樣的正則表達式:^[a-zA-Z]\s{3,16}$正則表達式空格字符

我想是與任何空間相匹配的任何名稱,例如John Smith,且包含長3至16個字符..

上午什麼我做錯了?

+5

此時表達式匹配單個字符'a'到'z'(小寫或大寫),後跟3到16個空格。量詞只適用於'\ s'。 –

+0

當試圖調試正則表達式時 - 不要過去像https://www.debuggex.com/r/GFfROJSrQEMa2mta這樣的網站,它可以幫助您快速找到問題。 – Shadow

+0

@shadow這是一個漂亮的小工具。我也喜歡regex101.com。它是完全免費的。 – c1moore

回答

1

背景

有一對夫婦的事情,這裏要注意。首先,量詞(在這種情況下,{3,16})僅適用於最後一個正則表達式標記。因此,您當前正則表達式的真正含義是「匹配任何具有單個字母字符的字符串(不區分大小寫),後跟3到16個空格字符(例如空格,製表符等)。」

二,名稱可以有超過2個部分(中間名,某些民族名稱,如「德拉克魯茲」)或包括特殊字符,如重音元音。你應該考慮這是你在程序中需要考慮的事情。這些事情很重要,應該考慮任何真實應用程序。

假設和回答

現在,就讓我們假設你只想要的名字一定的格式,由一個名字,姓氏,和空間。假設您只需要簡單的ASCII字符(即沒有特殊字符或重音字符)。此外,名字和姓氏都應以大寫字母開頭,後跟小寫字母。除此之外,名稱的各個部分的長度沒有限制。後^字符是所謂的positive lookahead

^(?=.{3,16}$)[A-Z][a-z]+ [A-Z][a-z]+$ 

注意

第一令牌:在這種情況下,下面的正則表達式會做的伎倆。基本上,積極的展望將匹配開頭(?=和結束)之間的正則表達式,而不實際移動與該字符串匹配的遊標的位置。

通知我刪除了\s的道理,因爲你通常(空間)。如果需要製表符和其他空格,那麼可以使用\s標記替換空間。

我還添加了一個限制,名稱必須以大寫字母開頭,後跟只有小寫字母。

原油翻譯

以幫助理解,這裏是一個什麼樣的正則表達式是真正做一個簡單的英文翻譯。斜體部分只是從正則表達式的英文翻譯的第一部分複製而來。

「相匹配的有3-16個字符,並以大寫字母字符後面跟着一個或多個(+)開始字母字符後跟一個空格,然後大寫字母字符後面跟着一個或多個任意字符串(+)字母字符並以任何小寫字母結尾。「

工具

有一對夫婦的工具,我想,當我試圖解決一個具有挑戰性的正則表達式來使用。他們被列在下面沒有特定的順序:

編輯/更新

您在您的意見,您使用的是JavaScript中您正則表達式提及。 JavaScript使用圍繞正則表達式的正斜槓來確定什麼是正則表達式。對於這個簡單的例子,使用正則表達式來匹配一個字符串有兩個選項。

首先,使用String的比賽方法如下

"John Smith".match(/^(?=.{3,16}$)[A-Z][a-z]+ [A-Z][a-z]+$/); 

其次,創建一個正則表達式,並使用其test()方法。例如,

/^(?=.{3,16}$)[A-Z][a-z]+ [A-Z][a-z]+$/.test("John Smith"); 

後者可能是你想要的東西,因爲它簡單地返回取決於正則表達式是否實際匹配字符串或不truefalse

+0

謝謝你所有的解釋,現在我清楚了,它在我的程序中工作得很好。謝謝 –