簡體   English   中英

正則表達式的名字和姓氏

[英]Regex for first and last name

我正試圖制作一個正則表達式,它必須匹配一個名稱: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}/

更新:人們評論說這不符合您的要求。 正如您所描述的那樣,它可能是您的需求的天真實現,但它只是您修復了錯誤的原始實現。 如果您實際上在尋找名稱,那么一個不那么天真的實現可能是:

/^[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]*$) - 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

你需要{0,19}而不僅僅是{19} 后者意味着“恰好19個字符”。

"John Smith".match(/^[A-Z][a-z]{0,19}[\s,][A-Z][a-z]{0,19}$/)

當然,這個正則表達式與許多完全有效的名稱不匹配,如“JoséOrtegay Gasset”或“Charles de Batz-Castelmore d'Artagnan”。

根據可接受姓氏的長度,您可以將“{0,19}”替換為“{1,19}”或“{2,19}”。 這同樣適用於名字。

/^[A-Z][a-z]+[\s|,][A-Z][a-z]{1,19}$/.test("John Smith") // true

這應該適合你

\b[A-Z]+.+[?^ ][A-Z].{1,19}|\b[A-Z]+.+[?^,][A-Z].{1,19}

這從單詞的開頭開始,檢查第一個字母是大寫字母,將第一個單詞匹配到空格或逗號,然后檢查以確保下一個單詞的第一個字母大寫,並匹配最多19個字母。之后的人物。 還要確保每個名稱長度為2個或更多字符。

{19}表示姓氏在第一個大寫字符后必須包含正好19個小寫字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM