英文:
Regular expression to disallow empty string and comma
问题
我正在尝试编写一个正则表达式,以限制字符串中的空字符串和逗号。
示例:
string = "" # 不允许
s = "ab c!@#)(*&^%$#~" # 允许
s = "sfsfsf,sdfsdf" # 不允许
这个正则表达式的目的是在Swagger文档中进行模式匹配,就像这个属性一样:type: string pattern: "^[0-9A-Za-z_]+$" value: type: object
我尝试了这个正则表达式 ^(?!\s*$)[^,]*$
,但它在Swagger文档中不受支持,并且我在golang代码中使用这个正则表达式时出现了以下错误:
invalid or unsupported Perl syntax: `(?!
英文:
I'm trying to write regular expression to restrict empty string and comma inside a string
example:
string = "" # not allowed
s = "ab c!@#)(*&^%$#~" # allowed
s = "sfsfsf,sdfsdf" # not allowed
The intention of this regexp is to do a pattern matching in swagger documentation like this property: type: string pattern: "^[0-9A-Za-z_]+$" value: type: object
I tried this regular expression ^(?!\s*$)[^,]*$
but it is not supported inside swagger doc and I get this error in golang code for this regular expression:
> invalid or unsupported Perl syntax: `(?!
答案1
得分: 3
实际上,你不需要前瞻。
只需删除前瞻表达式,并将 *
更改为 +
,这将要求至少一个字符,并简化你的正则表达式为 ^[^,]+$
如果这样可以解决问题,或者如果你有更多条件,请告诉我。
编辑:
考虑到 @JvdV 的评论(他似乎是对的),你可以使用以下正则表达式:
^\s*([^,\s]+\s*)+$
如果至少有一个非空白字符,这将匹配,并且如果有一个逗号的出现,整个字符串将被拒绝
编辑1:
为了避免灾难性回溯,可以将正则表达式简化如下:
^\s*[^,\s][^,]*$
解释:
^
- 匹配输入的开头\s*
- 可选地匹配任何空白字符[^,\s]
- 匹配至少一个逗号和空白字符之外的字符[^,]*
- 可以跟随任何逗号之外的字符,零次或多次$
- 匹配字符串的结尾
编辑2:为了避免前导/尾随空白字符,你可以使用以下正则表达式:
^[^\s,]([^,]*[^\s,])?$
英文:
You actually don't need a look ahead.
Just remove that lookahead expression and change *
to +
which will require at least one character and simplify your regex to ^[^,]+$
Let me know if that works or if you have more conditions.
Edit:
Considering @JvdV's comment (and he seems right), you can use following regex,
^\s*([^,\s]+\s*)+$
This will match if there is at least one non whitespace character and whole string will be rejected if there is even a single occurrence of a comma
Edit1:
To avoid catastrophic backtracking, the regex can be simplified as following,
^\s*[^,\s][^,]*$
Explanation:
^
- Match start of input\s*
- Optionally match any whitespaces[^,\s]
- Match at least one character other than comma and whitespace[^,]*
- Can be followed by any character other than comma zero or more times$
- Match end of string
Edit2: For avoiding leading/trailing whitespaces, you can use this regex,
^[^\s,]([^,]*[^\s,])?$
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论