我正在尝试创建一个正则表达式,如果字符串模式包含空格或为空,它将返回 false。到目前为止我有这个
[^\s]
我认为这将确保字符串不包含空格,但我不确定如何检查以确保它不为空。任何帮助将不胜感激。
根据我的理解,您想要匹配非空白和非空字符串,因此最佳答案是做相反的事情。我建议:
(.|\s)*\S(.|\s)*
这匹配任何包含至少一个非空白字符(中间的
\S
)的字符串。它的前后可以是任何内容、任何字符或空白序列(包括换行符):(.|\s)*
。
你可以尝试一下regex101上的解释。
/^$|\s+/
如果匹配,则有空格或为空。
大多数正则表达式引擎支持“对应部分”转义序列。也就是说,对于
\s
(空白),有其对应部分 \S
(非空白)。
使用此功能,您可以检查是否至少有一个带有
^\S+$
的非空白字符。
PHP 的 PCRE 有几个这样的转义序列。
/^$|\s+/
当空格或空格时这会匹配
/(?!^$)([^\s])/
当它不为空或空格时匹配
我最终使用了与已接受的答案类似的东西,但做了一些小的修改
(^$)|(\s+$)
的解释
从 2 个选项中选择 (^$) [1] 已编号的捕获组 ^$ 行首 ^ 行尾$ [2] 已编号的捕获组 (\s+$) 空格、一次或多次重复 \s+ 行尾$
非空白和非空字符串的适当正则表达式应该是
(.|\n)*\S(.|\n)*
这可以防止灾难性的回溯
(.|\s)*\S(.|\s)*
与
.
和 \s
具有重叠匹配。这显示在 regex101 上,测试字符串甚至只有 20 个左右的空格字符。
/^[\s]*$/
匹配空字符串和仅包含空格的字符串