我需要正则表达式不允许字段中只包含空格(用户不应该只在字段中输入空格),但它可以允许完全为空的字段,也可以允许中间有空格的字符串。
例如,如果我输入诸如“This is a test”或“testing”之类的字符串,则正则表达式应该通过验证。另外,如果我没有在该字段中输入任何内容,它应该会通过验证。如果我只输入空格,它应该会失败。
我尝试了下面提到的那些,但都失败了。
1) ^[^-\s][a-zA-Z0-9_\s-]+$ - 不允许我输入中间有空格的字符串
2) ^[^-\s][\w\s-]+$ - 不允许我输入字符串
最佳答案
字符串开头是否允许有空格?
如果是这样,那么类似的东西应该可以工作:
^$|.*\S+.*
否则这个应该可以解决问题:
^$|^\S+.*
说明:
我将解释没有前导空格的版本,因为另一个版本只是它的一个稍微扩展的版本。
首先,我们使用 ^$
检查字符串是否为空。
这在此处的另一个问题中进行了解释 Regular expression which matches a pattern, or is an empty string .
^
标记我们要检查匹配的字符串的开头。
\S+
检查非空白字符。 +
确保至少需要其中一个或多个。这包括空格、制表符、换行符等。
.*
匹配任何字符(用点表示)和任意数量的字符或不匹配(用 * 表示)。
这一切都假定您需要匹配整个字符串。如果您不是这种情况,您可以将表达式缩短为:
^$|\S+
或
^$|^\S+
如果用户输入与第一个表达式匹配,那么您将知道他输入的字符串包含非空格字符或为空字符。如果它与第二个表达式匹配,您还知道它以非空格字符开头。
这些表达式当然只是许多可能表达式中的两个。我选择它们是因为它们易于阅读和解释(至少在我看来是这样)。
关于javascript - javascript中的正则表达式不允许字段中只有空格但允许带有空格的字符串并且还允许空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53576782/