标记的正则表达式用空格/逗号分隔,最多n个标记

时间:2011-11-20 23:17:34

标签: php regex

我想通过在Codeigniter的验证库中通过正则表达式运行来验证用户对帖子的索引标记的输入。

理想情况下,正则表达式具有以下条件:

  1. 仅允许字母和数字
  2. 如果用空格(任何数字)或逗号(任意数字)分隔,
  3. 标签将被视为唯一实体
  4. 标签数量应该有限制(对于此情况下为6)
  5. 在SO上有一些部分解决方案:

    但他们没有完全解决我的问题。

    有什么建议吗?

2 个答案:

答案 0 :(得分:6)

如果你想要的只是验证,那么应该这样做:

^[a-zA-Z0-9]+(?:[ ,]+[a-zA-Z0-9]+){0,5}$

相同的正则表达式,但有评论和空格:

^ #beginning of string
[a-zA-Z0-9]+ #any sequence of alphanumeric letters
(?: #start of non capturing group
    [\ ,]+ #between 1 and int delimiting chars
    [a-zA-Z0-9]+ #again, any sequence of alphanumeric letters
) #end of non capturing group
{0,5} #allow between 0 and n-1 occurrences of preceding group
$ #end of string

要允许使用前导/尾随空格/逗号输入,请将正则表达式更改为:

^[ ,]*[a-zA-Z0-9]+(?:[ ,]+[a-zA-Z0-9]+){0,5}[ ,]*$

并进一步允许输入零标签,将正则表达式更改为:

^[ ,]*(?:[a-zA-Z0-9]+(?:[ ,]+[a-zA-Z0-9]+){0,5})?[ ,]*$

答案 1 :(得分:-1)

这是PCRE正则表达式:

^\w+[,\s]\w+\[,s]\w+[,\s]\w+[,\s]\w+[,\s]\w+$