javascript中的正则表达式不仅允许字段中存在空格,还允许带有空格的字符串,并且还允许空字段

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

我需要正则表达式来不允许字段中仅包含空格(用户不应在字段中仅输入空格),但它可以允许完全为空的字段,并且还可以允许中间有空格的字符串。

例如,如果我输入“This is a test”或“testing”等字符串,则正则表达式应该通过验证。另外,如果我不在该字段中输入任何内容,它应该通过验证。如果我只输入空格,它应该会失败。

我尝试了下面提到的方法,但失败了。

1) ^[^-\s][a-zA-Z0-9_\s-]+$ - 不允许我输入中间有空格的字符串

2) ^[^-\s][\w\s-]+$ - 不允许我输入字符串

javascript regex
3个回答
7
投票

字符串开头允许有空格吗?

如果是这样,那么类似的事情应该有效:

^$|.*\S+.*

否则这个应该可以解决问题:

^$|^\S+.*

说明:

我将解释不带前导空格的版本,因为另一个只是它的稍微扩展的版本。

首先,我们用

^$
检查字符串是否为空。 这在另一个问题中进行了解释与模式匹配的正则表达式,或者是空字符串

^
标记我们要检查匹配的字符串的开头。

\S+
检查非空白字符。
+
确保至少需要其中一个或多个。这包括空格、制表符、换行符等。

.*
匹配任何字符(用点表示)和任意数量的字符或不匹配任何字符(用 * 表示)。


这一切都假设您需要匹配整个字符串。如果您不是这种情况,您可以将表达式缩短为:

^$|\S+

^$|^\S+

如果用户输入与第一个表达式匹配,那么您就会知道他输入的字符串包含非空格或空的字符。如果它与第二个表达式匹配,您还知道它以非空格字符开头。

这些表达式当然只是许多可能表达式中的两个。我选择它们是因为它们易于阅读和解释(至少在我看来)。


0
投票

它需要是正则表达式吗? 如果没有,你可以这样做:

    if (userInput.length === 0 || (userInput.length > 0 && userInput.trim().length)) {
        console.log("user input ok");
    }

其中

userInput
是用户输入的内容。

userInput.trim()
删除字符串开头和结尾的所有空格。 因此,如果其长度为 0,则结果为 false,意味着该字符串仅是空格。 字符之间的任何空格都可以(
userInput.trim()
不要管这些)


0
投票

你需要简单的正则表达式

.*\S.*

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