允许字符串中有空格的正则表达式,但不仅仅是空格



我需要为表单验证编写一个正则表达式,允许字符串中有空格,但不允许只使用空白。

例如- 'Chicago Heights, IL'将是有效的,但如果用户只是多次按空格键并按enter键,则表单将无效。在验证之前,我尝试运行if (foo != null),然后运行正则表达式,但是点击空格键仍然注册字符,所以这不起作用。这是我现在使用的,它允许空格:

^[-a-zA-Z0-9_:,.' ']{1,100}$

很简单:.*S.*

这要求在任何位置都有一个非空格字符。正则表达式语法适用于Perl 5兼容的正则表达式,如果您使用其他语言,语法可能会有所不同。

下面将回答你的问题,但请参阅我后面的附加说明:

^(?!s*$)[-a-zA-Z0-9_:,.' ']{1,100}$

说明: (?!s*$)为负向。它的意思是:"以下字符不能匹配子模式s*$ ."当你考虑到子模式时,它的意思是:"以下字符既不能是空字符串,也不能一直是空格字符串。"因此,在字符串的这一点之后必须至少有一个非空白字符。一旦你有了这个规则,你就可以在你的字符类中自由地允许空格了。

额外注意:我不认为你的' '正在做你想要的。看起来您试图表示一个空格字符,但是regex将'解释为一个文字撇号。在字符类中,' '表示"匹配'、空格字符或'中的任何字符"(注意第二个'字符是多余的)。我猜你想要的更像这样:

^(?!s*$)[-a-zA-Z0-9_:,.s]{1,100}$

您可以使用简单的:

^(?=.*S).+$

如果你的正则表达式引擎支持正查找。该表达式至少需要一个非空格字符。

如果我们想只使用允许的字符集进行验证,那么我尝试使用USERNAME_REGEX = /^(?:s*[.-_]*[a-zA-Z0-9]{1,}[.-_]*s*)$/;

  • 字符串可以包含任意数量的空格,但至少包含一个字母数字字符。
  • 可选的., _ , -字符也可以,但字符串必须有一个字母数字字符。

试试这个正则表达式:

^[^s]+(s.*)?$

表示一个或多个非空格的字符,然后,可选地,空格后面跟着任何字符。

仅使用s*来避免在两个单词之间的正则表达式中出现一个或多个空格。

例如,"Mozilla/ 4.75""Mozilla/4.75"都可以用以下正则表达式匹配:

[A-Z][a-z]*/s*[0-9].[0-9]{1,2}

添加s*匹配两个单词之间的零,一个或多个空格。

最新更新