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

时间:2011-04-08 19:32:16

标签: regex whitespace

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

例如 - 'Chicago Heights, IL'有效,但如果用户只是按空格键任意次并点击输入,则表单将无法验证。在验证之前,我已经尝试运行if (foo != null)然后运行正则表达式,但是按空格键仍会记录字符,因此无效。以下是我现在使用的允许空格的内容:

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

7 个答案:

答案 0 :(得分:35)

这很简单:.*\S.*

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

答案 1 :(得分:16)

我不确定你需要RegEx。为什么不直接调用语言的Trim()方法,然后确保结果字符串是非空的?

答案 2 :(得分:6)

以下内容将以书面形式回答您的问题,但之后请参阅我的附加说明:

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

说明: (?!\s*$)negative lookahead。这意味着:“以下字符与子模式\s*$不匹配。”当您考虑子模式时,它意味着:“以下字符既不能是空字符串,也不能是一直到结尾的空格字符串。因此,在此之后必须至少有一个非空白字符。字符串。“一旦你完成了这个规则,你可以自由地在你的角色类中留出空格。

额外注意事项:我不认为您的' '正在按照您的意图行事。看起来你试图表示一个空格字符,但正则表达式将'解释为字面撇号。在字符类中,' '表示“匹配',空格字符或'”的任何字符(注意第二个'字符是多余的) 。我怀疑你想要的更像是这样:

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

答案 3 :(得分:5)

你可以使用简单的:

^(?=.*\S).+$

如果您的正则表达式引擎支持正向前瞻。此表达式至少需要一个非空格字符。

rubular上查看。

答案 4 :(得分:0)

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

  • 字符串可以包含开头或结尾处或之间的任意数量的空格,但至少包含一个字母数字字符。
  • 也允许使用., _ , -个字符,但字符串必须包含一个字母数字字符。

答案 5 :(得分:-1)

试试这个正则表达式:

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

这意味着一个或多个不是空格的字符,然后,可选地,空格后跟任何空格。

答案 6 :(得分:-1)

只需使用\s*即可避免两个单词之间正则表达式中的一个或多个空格。

例如,"Mozilla/ 4.75""Mozilla/4.75"都可以通过以下正则表达式进行匹配:

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

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