簡體   English   中英

正則表達式每個單詞的首字母大寫由空格和 3 到 29 個字符長...C#

[英]Regex first letter of each word Upper Case separated by spaces and 3 to 29 character long…C#

我最近被分配了一項不可能完成的任務(據我估計)來創建一個正則表達式模式,在該模式中我應該能夠使用以下准則驗證同一個句子或文本框中的幾個單詞:

  • 每個名稱/單詞的首字母必須大寫
  • 以空格分隔的名稱/單詞
  • 每個名稱/單詞 3 個字符或更多
  • 並且句子或文本框文本不能超過 20 個字符

示例: Joseph Gordon Levitt

這個例子正好是 20 個字符長,每個名字(或單詞)長度超過 3 個字符,用空格分隔,每個名字(或單詞)的第一個字母是大寫的。

我試過這個正則表達式模式^[AZ]{1}[a-zA-Z\\s]{3,20}$ 它適用於某些字符串,但不是全部。

讓我們來看看要求:

  • 每個名稱/單詞的首字母必須大寫:使用\\p{Lu}
  • 以空格分隔的名稱/單詞:使用\\s+ (1 個或多個空格)/ \\s (僅單個空格)
  • 每個名稱/單詞長度為 3 個字符或更多:因此單詞模式將為\\p{Lu}\\p{L}{2,} - 以大寫開頭,然后有 2 個或更多字母
  • 並且句子或文本框文本不能超過 20 個字符:在^ / \\A (字符串開頭)之后使用積極的前瞻: (?!.{21})(?=.{0,20}$)

生成的正則表達式看起來像

^(?!.{21})\p{Lu}\p{L}{2,}(?:\s\p{Lu}\p{L}{2,})*$
^(?=.{0,20}$)\p{Lu}\p{L}{2,}(?:\s\p{Lu}\p{L}{2,})*$

或者,如果單詞之間可以有 1+ 個空格

^(?!.{21})\p{Lu}\p{L}{2,}(?:\s+\p{Lu}\p{L}{2,})*$
^(?=.{0,20}$)\p{Lu}\p{L}{2,}(?:\s+\p{Lu}\p{L}{2,})*$

注意:如果您曾經針對可以以\\n 、換行符結尾的字符串對其進行測試,請將$替換$ \\z

請參閱正則表達式演示

細節

  • ^ - 字符串的開始
  • (?=.{0,20}$) - 字符串中必須有 0 到 20 個非換行符直到結尾
  • \\p{Lu} - 大寫字母
  • \\p{L}{2,} - 兩個或更多字母
  • (?:\\s\\p{Lu}\\p{L}{2,})* - 0 次或多次重復:
    • \\s - 一個空格(如果使用\\s+則為 1+ 個空格)
    • \\p{Lu}\\p{L}{2,} - 一個大寫字母,然后是任意兩個或多個字母
  • $ - 字符串的結尾( \\z是字符串的結尾)。

選項之一是這樣的:

^(?!.{21})[A-Z][a-z]{2,}(\s[A-Z][a-z]{2,})*$

演示: https : //dotnetfiddle.net/oWjSI4

在此處輸入圖片說明

暫無
暫無

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

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