应与正则表达式匹配的示例:
- 绿色, 黄色-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}, ?)?[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