正则表达式允许c#中的空间在多个空间到来时不起作用

时间:2014-07-18 07:04:02

标签: c# asp.net regex

我有一个正则表达式来检查在文本框中输入的数据。它只允许使用字母数字加连字符( - ),下划线(_)和空格。它适用于单值。但是如果我输入多个空格或下划线,它就会失败。以下是我的表达:

Regex.IsMatch(Text, "^[A-Za-z0-9-_ ]*$")

请建议是否有其他方法可以执行此操作或表达式可以更改。

此表达式用于多行文本框,因此也必须包含换行符。

4 个答案:

答案 0 :(得分:3)

试试这个:

Regex.IsMatch(Text, "^[A-Za-z0-9-_\\s]*$")

我的理解是\s匹配包含CRLF的空格,这将涵盖OP的多行文本框的用例。因此,我认为用“\ s”替换“”会更好。

答案 1 :(得分:1)

\s替换空格字符以允许任何空白字符。

Regex.IsMatch(Text, @"^[a-zA-Z0-9\s_-]*$")

String text = @"foo-
bar  baz _____________     
quz_";

Regex.IsMatch(text, "^[a-zA-Z0-9-_ ]*$");    // False
Regex.IsMatch(text, @"^[a-zA-Z0-9\s_-]*$");  // True

答案 2 :(得分:1)

您应该将正则表达式更改为使用空格字符(\ s)和字母数字值(\ w)的已定义标记。

\ s将处理空格,制表符和换行符(多行输入所需) \ w将处理字母数字和下划线。
你需要的另一件事是连字符,它只是输入一个连字符。

这使你的最终正则表达式看起来像这样:

^[\w\s-]*$

C#可能是:

Regex.IsMatch(Text, @"^[\w\s-]*$")

测试正则表达式并获得帮助的好地方是像RegExr这样的页面: http://www.regexr.com/

答案 3 :(得分:1)

您需要添加一个选项以允许它以多行方式工作。它不会是多个空格或下划线打破它,而是换行符。

将正则表达式更改为以下内容,它应该可以正常运行...

Regex.IsMatch(Text, "^[A-Za-z0-9-_ ]*$",RegexOptions.Multiline)

正如其他人所说,使用\而不是文字空间也更好。添加IgnoreCase选项以使正则表达式更简单。为了清晰起见,最后逃避你的连字符。

vb.net

Regex.IsMatch(Text, "^[a-z0-9\-_\s]*$",RegexOptions.Multiline or RegexOptions.IgnoreCase)

C#

Regex.IsMatch(Text, @"^[a-z0-9\-_\s]*$", RegexOptions.Multiline | RegexOptions.IgnoreCase);