检查特定的Regexp,它最多可以包含3个由字母和数字组成的键,并由逗号分隔,但不仅是零

os8fio9y  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(94)

我需要帮助检查我的Regexp。
内容:
我有一个脚本,需要一个Excel文件作为输入导入数据库中的产品,有一个特殊的字段,需要“额外的关键字”的产品,该产品可以有3个额外的关键字,他们必须由逗号分隔。

  • 钥匙只能有字母和数字
  • 键不能只有0,并且每个键限制为20个字符

因此,我为检查“extra keys”字段而创建的Regexp是

/^((?!0+,?$)(?! +,?$)[A-Z0-9 ]{1,20},?){0,3}$/

因此,我可以稍后在服务器中通过“,”(逗号)拆分它,Regexp中接受空格,因为我打算在拆分之前将所有空格替换为空字符串
我的问题是,这个regexp行吗?
我使用过正则表达式,但这是我第一次使用负前瞻表达式。
如果它不正确,你能帮我得到正确的regexp吗?
谢谢你,谢谢!

  • -编辑-*

正如我刚才在Reilas的接受答案中的注解中所说的那样,我的RegExp根本不正确,因为它接受0 s+空格,所以当我用空格替换空字符串时,我会得到0 s,这对我的情况是无效的。

d7v8vwbk

d7v8vwbk1#

如果键只能包含字母和数字,并且不能只包含零,并且字符串中其他可接受的字符是可选空格之间的逗号,则可以使用单个负向前查找来排除2个单词边界之间的零:

^(?!.*?\b0+\b) *[A-Z\d]{1,20}(?: *, *[A-Z\d]{1,20}){2} *$

模式匹配:

  • ^字符串开头
  • (?!.*?\b0+\b)负前瞻,不仅在字边界之间Assert零
  • *[A-Z\d]{1,20}匹配可选空格,然后是1-20个字符A-Z或数字
  • (?:非捕获组
  • *, *在可选空格之间匹配逗号
  • [A-Z\d]{1,20}匹配1-20个字符A-Z或数字
  • ){2}关闭非捕获组并重复2次
  • *匹配可选空格
  • $字符串结尾

参见regex demo
如果不允许有空格:

^(?!.*?\b0+\b)[A-Z\d]{1,20}(?:,[A-Z\d]{1,20}){2}$

Regex demo

pinkon5k

pinkon5k2#

  • ".我的问题是,这个regexp可以吗?*
  • 我使用过正则表达式,但这是我第一次使用负先行表达式。*
  • 如果它不正确,你能帮助我得到正确的regexp吗?..."*

它工作正常,周围的“看”是正确的。
这里有一个类似的模式。

(?!(?:0+| +)$)[A-Z\d ]{1,20}(?:,(?!(?:0+| +)$)[A-Z\d ]{1,20}){2}

如果您使用的是 PCRE regex引擎,则可以通过引用捕获组来简化模式。

((?!(?:0+| +)$)[A-Z\d ]{1,20})(?:,\g<1>){2}

相关问题