2013-07-01 140 views
1

我试图验证验证问题,这是常规的expressin我正则表达式,我不是这个意思,但这种表达不容许空间重新验证

^\S+$ 

例如,如果我输入'测试我',这个表达式说这是无效的。我该如何解决这个问题以允许空格?

+1

那么,你想在你的问题中允许什么? –

+4

正则表达式正在做的唯一事情是确保字符串中没有空格字符。编辑:对不起,它也确保它不是空的,因为它使用+而不是* – OmnipotentEntity

+0

@OmnipotentEntity取决于正则表达式的味道,它还可以检查表达式驻留在行边界之间。请参阅RegexOptions.Multiline here:http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx –

回答

2

你究竟想要匹配什么?

  • ^字符串的开头匹配
  • $字符串的结尾匹配
  • +允许最后一个表达式的多个occurances
  • \S代表什么,但一个空白
  • \s代表white-spaces

您拥有的表达式将匹配任何仅包含非空白字符的字符串。如果你能表达你想要匹配的东西,我可以帮你解决。

+0

嗯,我没有足够的声望点来评论问题。这是我可以与提问者沟通的唯一方式。感谢您的投票,我离评论的可能性更远。 –

+0

@ Cyborgx37当我评论 – aaronman

+0

@aaronman时,情况有所不同 - 只有在其中一个网站上获得至少200个声望后。 – JDB

1

不匹配的原因是因为你没有允许您在字符串中的空白字符\S 的东西,可能会更好地为您的是:

^[\w\s]+$

\w等价于[A-ZA -z0-9_]

\s比赛的空白

记住,这个正则表达式不会异体w ^标点符号,如果你想,你可以使用^.+$

+0

没有标点符号?我的名字包含一个“ - ”......这永远不会是一个有效的答案吗? – JDB

+0

@ Cyborgx37这实际上是一个安全问题而不是名称验证,但我确实添加到我的回答 – aaronman

+0

“你父亲的名字是什么?”是一个很常见的验证问题。 – JDB

1

^意味着

\S是在正则表达式一个特殊的关键字,它表示“非空格字符”

“字符串的开始”会更好+意味着找到以前的一次或多次

$意味着

所以在“字符串的结束”英文,这个正则表达式说:从字符串的开始处开始,在字符串结尾之前找到一次或多次非空白字符。这就是为什么它不允许空格。

+2

'\ S'并不特定于.NET Regex。 – OmnipotentEntity

+2

也''S'匹配**非** - 空白 –

+0

你是对的,但它适用于正则表达式的.NET实现。 – Haney

2
 
           ^\S+$ 
           ^^ ^^ 
           || || 
^ start of string-------------+| || 
\S anything but a whitespace----+ || 
+ one or more of what precedes---+| 
$ end of string-------------------+ 

(查看regular-expressions.info放大参考)

不知道你想改变什么,真的,因为这正则表达式似乎为的唯一目的允许的空间已被写入。