正则表达式非空且非空格

问题描述 投票:0回答:8

我正在尝试创建一个正则表达式,如果字符串模式包含空格或为空,它将返回 false。到目前为止我有这个

[^\s] 

我认为这将确保字符串不包含空格,但我不确定如何检查以确保它不为空。任何帮助将不胜感激。

regex whitespace
8个回答
68
投票

根据我的理解,您想要匹配非空白和非空字符串,因此最佳答案是做相反的事情。我建议:

(.|\s)*\S(.|\s)*

这匹配任何包含至少一个非空白字符(中间的

\S
)的字符串。它的前后可以是任何内容、任何字符或空白序列(包括换行符):
(.|\s)*

你可以尝试一下regex101上的解释。


60
投票

/^$|\s+/
如果匹配,则有空格或为空。


25
投票

大多数正则表达式引擎支持“对应部分”转义序列。也就是说,对于

\s
(空白),有其对应部分
\S
(非空白)。

使用此功能,您可以检查是否至少有一个带有

^\S+$
的非空白字符。

PHP 的 PCRE 有几个这样的转义序列


11
投票

/^$|\s+/
当空格或空格时这会匹配

/(?!^$)([^\s])/
当它不为空或空格时匹配


6
投票

我最终使用了与已接受的答案类似的东西,但做了一些小的修改

(^$)|(\s+$)

Expresso

的解释
从 2 个选项中选择 (^$)
    [1] 已编号的捕获组 ^$
        行首 ^
        行尾$
    [2] 已编号的捕获组 (\s+$)
        空格、一次或多次重复 \s+
        行尾$

6
投票

有点晚了,但我发现这是一个正则表达式,它返回 0 匹配空白或空格:

/^(?!\s*$).+/

您可以在 regex101

进行测试

0
投票

非空白和非空字符串的适当正则表达式应该是

(.|\n)*\S(.|\n)*

这可以防止灾难性的回溯

(.|\s)*\S(.|\s)*

.
\s
具有重叠匹配。这显示在 regex101 上,测试字符串甚至只有 20 个左右的空格字符。


-1
投票

/^[\s]*$/
匹配空字符串和仅包含空格的字符串

© www.soinside.com 2019 - 2024. All rights reserved.