4

我正在使用 SobiPro,它是 joomla 的目录系统,并且我有一个字段,其值仅包含字母数字和连字符,因此该文本字段中可能包含的示例如下:

玩具风筝、塑料轮子、1-Way Gizmos、金属线轴、3M 扎带

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

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

但显然我是不对的,它不考虑连字符..任何帮助!谢谢!

4

4 回答 4

23

尝试这个:

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

使用^$确保我们验证整个值,而不仅仅是在其中的某个地方找到匹配项。

第一个字符类,[-\w\s]+允许一个或多个字母数字、空格或破折号字符。破折号应该放在类括号中的第一位。

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

笔记:

  • 此表达式允许空条目,例如A,B,,D. 如果您不想允许这样做,请将倒数第二个更改*+.
  • \w速记允许下划线。为防止这种情况,请将它们替换为A-Za-z0-9.
于 2013-09-11T15:44:42.540 回答
3

使用字符类。

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

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

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

于 2013-09-11T15:45:11.823 回答
3

尝试这个:

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

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

单词字符通常包括,因此如果要防止这种情况_,您可能需要将其替换为。A-Za-z0-9

[-A-Za-z0-9\s]+(,[-A-Za-z0-9\s]+)*
于 2013-09-11T15:45:20.953 回答
1

您可以为此使用字符类

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

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

如果您的验证器不强制正则表达式始终匹配整个输入字段,您可能需要通过在开头和结尾将其包围来锚定它。^$

于 2013-09-11T15:45:14.400 回答