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

use*_*242 14 regex whitespace

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

例如 - 'Chicago Heights, IL'将是有效的,但如果用户只是按空格键任意次数并点击输入表单将无法验证.之前的验证,我已经试过运行if (foo != null)然后运行正则表达式,但按下空格键仍然注册的人物,所以这是行不通的.这是我现在使用的允许空格:

^[-a-zA-Z0-9_:,.' ']{1,100}$
Run Code Online (Sandbox Code Playgroud)

Rol*_*lig 36

这很简单: .*\S.*

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


Jus*_*gan 8

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

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

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

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

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


Ale*_*lex 6

你可以使用简单的:

^(?=.*\S).+$
Run Code Online (Sandbox Code Playgroud)

如果你的正则表达式引擎支持积极的前瞻.此表达式至少需要一个非空格字符.

rubular上看到它.