我正在嘗試使正則表達式匹配一個名稱,如:John Smith。唯一的規則是姓和名應以大寫字母開頭,並且必須至少有2個字符長。此外,姓氏限制爲最多20個字符,並且名稱之間存在昏迷或空白區域。到目前爲止,我有這樣的:正則表達式的姓名
/[A-Z][a-z]+(\s|,)[A-Z][a-z]{19}/
,當我在這個網站測試了它它不工作:http://www.regular-expressions.info/javascriptexample.html。我不確定我錯過了什麼。有任何想法嗎?
我正在嘗試使正則表達式匹配一個名稱,如:John Smith。唯一的規則是姓和名應以大寫字母開頭,並且必須至少有2個字符長。此外,姓氏限制爲最多20個字符,並且名稱之間存在昏迷或空白區域。到目前爲止,我有這樣的:正則表達式的姓名
/[A-Z][a-z]+(\s|,)[A-Z][a-z]{19}/
,當我在這個網站測試了它它不工作:http://www.regular-expressions.info/javascriptexample.html。我不確定我錯過了什麼。有任何想法嗎?
將{19}
更改爲{1,19}
。就其本身而言,{19}
表示「完全匹配前一個字符的19個」。 {1,19}
的意思是「前一個字符的1和19之間的匹配」。
/[A-Z][a-z]+(\s|,)[A-Z][a-z]{1,19}/
更新:人們評論說,這不符合您的要求。正如你描述的那樣,它可能是你的需求的一個天真的實現,但它只是你修復bug的原始實現。如果你實際上是在尋找的名字,一個不太幼稚的做法是:
/^[A-Z][-'a-zA-Z]+,?\s[A-Z][-'a-zA-Z]{0,19}$/
這將趕上撇號或破折號名稱,允許名稱之間的逗號後面輸入一個空格,如果他們之間用逗號隔開,並允許用於單字母姓氏。但正如評論者所指出的,這仍然無法匹配一堆合法的名字,並且匹配絕對不像名字的東西。
它還增加了錨點^
和$
以表示整個字符串必須匹配。如果你正在尋找一個子串,你可以刪除這些錨,並添加單詞邊界檢查來代替:
/\b[A-Z][-'a-zA-Z]+,?\s[A-Z][-'a-zA-Z]{0,19}\b/
/^[A-Z][a-z]+[\s|,][A-Z][a-z]{1,19}$/.test("John Smith") // true
這個正則表達式允許數字值。我怎麼能實現它 – bhavikshah28 2015-09-18 14:37:08
這應該爲你
\b[A-Z]+.+[?^ ][A-Z].{1,19}|\b[A-Z]+.+[?^,][A-Z].{1,19}
工作,這將啓動與一個開始字,檢查第一個字母是否爲大寫字母,將第一個字符與空格或逗號相匹配,然後檢查以確保下一個單詞的第一個字母大寫,並匹配所有後面的19個字符。還要確保每個名稱的長度都是2個或更多字符。
{19}表示姓氏在第一個大寫字符後必須正好有19個小寫字符。
這裏有一些表達,這可能有助於爲更復雜的名字
(^[A-Z][a-z]*$) - A typical First Name or Last Name like Thomas
(^[A-Z][a-z][A-Z][a-z]*$) - names like McDonald
(^[A-Z][a-z]*(-|\s)[A-Z][a-z]*$) - names like Tonya-Smith or Tonya Smith
(^[A-Z]('|’)[A-Z][a-z]*$) - names like Tim O’Reilly
(^[a-z]+\s[A-Z][a-z]*$) - names like von Gogh
(1)「不工作」是_永遠_足夠的問題說明。 (2)你爲什麼不使用瀏覽器控制檯來測試正則表達式? – 2012-02-24 16:28:47
@MДΓΓБДLL,實際上,我認爲正則表達式是「不工作」是一個有效的問題描述的例外。在這個領域,它隱含地意味着「不符合我打算匹配的內容」,並且他準確地解釋了他希望匹配的內容。 – 2012-02-24 16:32:24
這是一個非常可怕的*糟糕的方法,**你知道。這是無望的天真。考慮一下RenéeFleming,Tim O'Reilly,John Paul Jones,WilliamMᶜKinley,Malcolm X,Cher,Dominique Strauss-Kahn,FedericoPeña,FrançoisMitterand,NicolaeCeauşescu,蔣介石,MaríaJosé馬爾克斯,何塞瑪麗亞華雷斯或Federico del SagradoCorazóndeJesúsGarcíaLorca。 – tchrist 2012-02-24 16:42:29