繁体   English   中英

JavaScript中的正则表达式不仅不允许字段中包含空格,而且允许包含空格的字符串,还允许包含空字段

[英]Regular expression in javascript to not allow only whitespaces in a field but allow string with whitespaces and also allow empty field

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

例如,如果我输入诸如“ 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,那将是错误的,并且意味着该字符串只是空格。 字符之间的任何空格都可以( userInput.trim()那些空格)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM