正则表达式不允许使用空字符串和逗号



我正试图编写正则表达式来限制字符串中的空字符串和逗号

示例:

string = "" # not allowed
s = "ab c!@#)(*&^%$#~" # allowed
s = "sfsfsf,sdfsdf" # not allowed

此regexp的目的是在swagger文档中进行模式匹配,如以下属性:type: string pattern: "^[0-9A-Za-z_]+$" value: type: object

我尝试了这个正则表达式^(?!s*$)[^,]*$,但它在swagger-doc中不受支持,我在这个正则表达式的golang代码中得到了这个错误:

invalid or unsupported Perl syntax: `(?!

实际上,您不需要向前看。

只需删除该前瞻表达式并将*更改为+,这将需要至少一个字符,并将正则表达式简化为^[^,]+$

让我知道这是否有效,或者你是否有更多的条件。

编辑:

考虑到@JvdV的评论(他似乎是对的(,您可以使用以下regex,

^s*([^,s]+s*)+$

如果至少有一个非空白字符,这将匹配,如果出现逗号,整个字符串将被拒绝

查看此演示

第1版:

为了避免灾难性的回溯,正则表达式可以简化如下:

^s*[^,s][^,]*$

说明:

  • ^-匹配输入开始
  • s*-可选匹配任何空白
  • [^,s]-至少匹配逗号和空白以外的一个字符
  • [^,]*-后面可以跟逗号以外的任何字符零次或多次
  • $-匹配字符串末尾

更新的演示

Edit2:为了避免前导/尾随空格,您可以使用此regex,

^[^s,]([^,]*[^s,])?$

演示避免前导/尾随空白

最新更新