我需要为表单验证编写一个正则表达式,允许字符串中的空格,但不允许只有空格。
例如 - 'Chicago Heights, IL'
有效,但如果用户只是按空格键任意次并点击输入,则表单将无法验证。在验证之前,我已经尝试运行if (foo != null)
然后运行正则表达式,但是按空格键仍会记录字符,因此无效。以下是我现在使用的允许空格的内容:
^[-a-zA-Z0-9_:,.' ']{1,100}$
答案 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)
答案 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*
匹配。