我正在使用SobiPro,一个joomla的目录系统,我有一个字段,其值只包含字母数字和连字符,所以这个文本字段中可能包含的样本将是:
玩具风筝,塑料轮,单向小玩意,金属线轴,3M线束这个正则表达式将验证它们在字段保存之前在表单上输入的内容。
我认为:(\ w +)(,\ s * \ w +)*
但显然我不对,并没有考虑连字符..任何帮助!谢谢!
答案 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}}处。端。