【发布时间】:2026-02-03 12:25:01
【问题描述】:
我想通过在 Codeigniter 的验证库中运行正则表达式来验证用户输入的帖子索引标签。
理想情况下,正则表达式应具有以下条件:
- 只允许字母和数字
- 如果用空格(任何数字)或逗号(任何数字)分隔,标签将被视为唯一实体
- 标签的数量应该有限制(例如本例中为 6 个)
在 SO 上有一些部分解决方案:
但他们并没有完全解决我的问题。
有什么建议吗?
【问题讨论】:
我想通过在 Codeigniter 的验证库中运行正则表达式来验证用户输入的帖子索引标签。
理想情况下,正则表达式应具有以下条件:
在 SO 上有一些部分解决方案:
但他们并没有完全解决我的问题。
有什么建议吗?
【问题讨论】:
如果你想要的只是验证,那么应该这样做:
^[a-zA-Z0-9]+(?:[ ,]+[a-zA-Z0-9]+){0,5}$
相同的正则表达式,但带有 cmets 和空格:
^ #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,5} ?
{0,n-1}(注意零!{1,5} 错了。抱歉)。给我一秒钟,我会用一些 cmets 来更新答案,解释正则表达式的作用。
{0,n-1}。顺便说一句,正则表达式是否需要至少存在一个标签,或者还允许空输入?那么前导/尾随空格/逗号呢?
这是 PCRE 正则表达式:
^\w+[,\s]\w+\[,s]\w+[,\s]\w+[,\s]\w+[,\s]\w+$
【讨论】:
[,缺少\s 的转义,只是从拼写错误开始。下一个:\s 不仅匹配space 和\w 匹配_,这是不允许的,因此违反了要求#1。仅匹配由单个空格/逗号分隔的标签,因此违反了要求 #2。仅当恰好提供 6 个标签时才匹配,因此违反了要求 #3。总违规/错误:6(如果不是更多),正确的事情:0。