2

应与正则表达式匹配的示例:

  • 绿色, 黄色-3, 12345, 你好, 世界
  • 蓝色, 红色, 蓝绿色, 橙色
  • 绿色,12345,世界
  • 你好
  • 绿色

我想创建一个正则表达式,它与具有以下规则的逗号分隔列表匹配:

  • 该列表可以包含 1、2、3、4 或 5 个项目。
  • 这些项目不得包含空格,每个逗号后的可选空格除外。
  • 最后一项不能有尾随逗号。
  • 每个项目的长度必须在 2 到 30 个字符之间。

到目前为止我所拥有的(不起作用):

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

3 回答 3

8

试试这个:

/^[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}$/
于 2013-09-30T19:15:49.603 回答
4

像这样的东西应该工作:

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

这将匹配 2 到 30 个拉丁字母或十进制数字或连字符,后跟一个逗号和一个可选空格,均重复 0 到 4 次,然后是 2 到 30 个拉丁字母或十进制数字或连字符。

你可以在这里测试一下。

于 2013-09-30T19:15:42.593 回答
1
/^[^,]{2,30}(, ?[^,]{2,30}){0,4}$/

之所以[^,]使用,是因为您没有指定允许的字符,所以我假设只允许使用逗号。您当然可以对该字符类使用 , 或任何其他限制[a-zA-Z0-9_-]\w

于 2013-09-30T19:18:55.320 回答