我有一个正则表达式来检查在文本框中输入的数据。它只允许使用字母数字加连字符( - ),下划线(_)和空格。它适用于单值。但是如果我输入多个空格或下划线,它就会失败。以下是我的表达:
Regex.IsMatch(Text, "^[A-Za-z0-9-_ ]*$")
请建议是否有其他方法可以执行此操作或表达式可以更改。
此表达式用于多行文本框,因此也必须包含换行符。
答案 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);