簡體   English   中英

如何制作正則表達式以匹配逗號分隔列表,列表中最多包含5個項目?

[英]How can I craft a regular expression to match a comma delimited list with a maximum of 5 items in the list?

應該與正則表達式匹配的示例:

  • 綠色,黃色3,12345,你好,世界
  • 藍色,紅色,藍綠色,橙色
  • 綠色,12345,世界
  • 你好
  • 綠色

我想創建一個與逗號分隔的列表匹配的正則表達式:

  • 該列表可以包含1個,2個,3個,4個或5個項目。
  • 除了每個逗號后面的可選空格外,這些項目不得包含空格。
  • 最后一項不能有逗號。
  • 每個項目必須介於2到30個字符之間。

到目前為止我所做的(不起作用):

/^([a-z0-9]{2,30}, ?)?[a-z0-9]{2, 30}$/i

試試這個:

/^[a-z0-9-]{2,30}(,\s?[a-z0-9-]{2,30}){0,4}$/i

分手:

/^
   [a-z0-9-]{2,30}   # One item for sure
   (                 # A capture group. You can make it non-capture if not required
      ,\s?              # Comma followed by optional space
      [a-z0-9-]{2,30}   # Another item
   ){0,4}            # 0 to 4 repetition.
$/ix 

您甚至可以使用\\w縮短正則表達式,這相當於 - [0-9a-zA-Z_] ,在更新后的評論之后,您說您也可以接受_ 所以,只需使用:

/^[\w-]{2,30}(, ?[\w-]{2,30}){0,4}$/

這樣的事情應該有效:

/^([a-z0-9-]{2,30}, ?){0,4}[a-z0-9-]{2,30}$/i

這將匹配2到30個拉丁字母或十進制數字或連字符,后跟逗號和可選空格,全部重復0到4次,然后是2到30個拉丁字母或十進制數字或連字符。

你可以在這里測試一下

/^[^,]{2,30}(, ?[^,]{2,30}){0,4}$/

使用[^,]是因為您沒有指定允許的字符,因此我假設不允許使用逗號。 您當然可以使用[a-zA-Z0-9_-]\\w或該角色類的任何其他限制。

暫無
暫無

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

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