我需要正则表达式来不允许字段中仅包含空格(用户不应在字段中仅输入空格),但它可以允许完全为空的字段,并且还可以允许中间有空格的字符串。
例如,如果我输入“This is a test”或“testing”等字符串,则正则表达式应该通过验证。另外,如果我不在该字段中输入任何内容,它应该通过验证。如果我只输入空格,它应该会失败。
我尝试了下面提到的方法,但失败了。
1) ^[^-\s][a-zA-Z0-9_\s-]+$ - 不允许我输入中间有空格的字符串
2) ^[^-\s][\w\s-]+$ - 不允许我输入字符串
字符串开头允许有空格吗?
如果是这样,那么类似的事情应该有效:
^$|.*\S+.*
否则这个应该可以解决问题:
^$|^\S+.*
我将解释不带前导空格的版本,因为另一个只是它的稍微扩展的版本。
首先,我们用
^$
检查字符串是否为空。
这在另一个问题中进行了解释与模式匹配的正则表达式,或者是空字符串。
^
标记我们要检查匹配的字符串的开头。
\S+
检查非空白字符。 +
确保至少需要其中一个或多个。这包括空格、制表符、换行符等。
.*
匹配任何字符(用点表示)和任意数量的字符或不匹配任何字符(用 * 表示)。
这一切都假设您需要匹配整个字符串。如果您不是这种情况,您可以将表达式缩短为:
^$|\S+
或
^$|^\S+
如果用户输入与第一个表达式匹配,那么您就会知道他输入的字符串包含非空格或空的字符。如果它与第二个表达式匹配,您还知道它以非空格字符开头。
这些表达式当然只是许多可能表达式中的两个。我选择它们是因为它们易于阅读和解释(至少在我看来)。
它需要是正则表达式吗? 如果没有,你可以这样做:
if (userInput.length === 0 || (userInput.length > 0 && userInput.trim().length)) {
console.log("user input ok");
}
其中
userInput
是用户输入的内容。
userInput.trim()
删除字符串开头和结尾的所有空格。 因此,如果其长度为 0,则结果为 false,意味着该字符串仅是空格。 字符之间的任何空格都可以(userInput.trim()
不要管这些)
你需要简单的正则表达式
.*\S.*