如何编写正则表达式来验证以逗号分隔的值列表

时间:2013-09-11 15:42:03

标签: regex validation sobipro

我正在使用SobiPro,一个joomla的目录系统,我有一个字段,其值只包含字母数字和连字符,所以这个文本字段中可能包含的样本将是:

玩具风筝,塑料轮,单向小玩意,金属线轴,3M线束

这个正则表达式将验证它们在字段保存之前在表单上输入的内容。

我认为:(\ w +)(,\ s * \ w +)*

但显然我不对,并没有考虑连字符..任何帮助!谢谢!

4 个答案:

答案 0 :(得分:19)

试试这个:

^[-\w\s]+(?:,[-\w\s]*)*$

使用^$可确保我们验证整个值,而不只是在其中找到匹配项。

第一个字符类[-\w\s]+允许使用一个或多个字母数字,空格或短划线字符。 破折号应该在类括号中排在第一位。

第二组允许零次或多次重复以分隔逗号。它包含在非捕获括号中,这是一个小的性能优化:(?: … )*

备注:

  • 此表达式允许空条目,例如A,B,,D。如果您不想允许此操作,请将倒数第二个*更改为+
  • \w简写允许下划线。为防止出现这种情况,请将其替换为A-Za-z0-9

答案 1 :(得分:2)

试试这个:

[-\w\s]+(,[-\w\s]+)*

[-\w\s]表示单词字符,空格或连字符。

单词字符通常包含_,因此如果您想阻止此字符,可能需要将其替换为A-Za-z0-9

[-A-Za-z0-9\s]+(,[-A-Za-z0-9\s]+)*

答案 2 :(得分:1)

使用字符类。

^([0-9A-Za-z -]+)(,[0-9A-Za-z -]+)*$

请注意,\w包含下划线,这就是我将其扩展到字母数字范围的原因。

感谢@Jay指出丢失的锚点。

答案 3 :(得分:1)

您可以使用character class

[\w\s-]+(,[\w\s-]*)*

我已将组内的字符类设为可选,以便允许空字段。

如果验证程序没有强制正则表达式始终与整个输入字段匹配,则可能需要anchor将其^包围在开头$和{{1}}处。端。