我如何不允许特殊字符,但允许正则表达式中的空格?

时间:2012-12-31 21:15:25

标签: c# regex

当用户在datagridview中输入特殊字符时,我需要填充错误消息。截至目前,我有以下内容:

if (Regex.IsMatch(columnValue.ToString(),"^[A-Za-z0-9]$"))
                {
                    MessageBox.Show("You may not use special characters.", "Saving not allowed at this time", MessageBoxButtons.OK, MessageBoxIcon.Error);  

这个正则表达式有效,并且不允许使用特殊字符,但如果字符之间有空格则应该允许使用if语句。

如何让它允许空格,而不是特殊字符?

谢谢,

5 个答案:

答案 0 :(得分:6)

我想你只想在正则表达式中添加一个空格:

if (Regex.IsMatch(columnValue.ToString(),"^[ A-Za-z0-9]$"))

编写正则表达式时,使用逐字字符串运算符@通常是一个好习惯,因为许多特殊表达式都要求您使用反斜杠字符。

if (Regex.IsMatch(columnValue.ToString(), @"^[ A-Za-z0-9]$"))

如果您明确告诉正则表达式忽略模式中的空格,则需要转义空格字符。

if (Regex.IsMatch(columnValue.ToString(), @"^[\ A-Za-z0-9]$", RegexOption.IgnorePatternWhitespace))

如果您希望它们能够使用任何空格字符(空格,制表符,换行符等),则可以使用空白字符类\s

if (Regex.IsMatch(columnValue.ToString(), @"^[\sA-Za-z0-9]$"))

<强>更新

看起来您可能想要一个排除组中字符的正则表达式。

您当前的正则表达式正在从字符串^的开头到字符串$的末尾,以查找组A-Za-z0-9中的一个字符。如果您想匹配完全相反的情况,可以在!之前使用not运算符Regex.IsMatch,例如:

if (!Regex.IsMatch(columnValue.ToString(), @"^[ A-Za-z0-9]$"))

但是如果您想在正则表达式中编写一组被排除的字符,则可以在您的组中添加^。当^位于群组[^]内时,其后的任何字符都会从匹配项中排除。

正则表达式[A-Z]将匹配任何字符A-Z。正则表达式[^A-Z]将匹配任何字符 NOT A-Z。

如果您正在寻找的话,可以将您的陈述改为:

if (Regex.IsMatch(columnValue.ToString(), @"[^A-Za-z0-9\ ]"))

此语句将匹配包含组中不包含的任何字符的任何字符串。所以,如果他们输入“Hello World”就不会匹配。如果他们输入“Hello!World”,它会匹配,因为“!”不属于小组。

注意:排除了前导^和尾随$。在这个正则表达式中,我们不关心字符串的长度,因为我们只匹配字符串中任何地方都没有的字符。

答案 1 :(得分:3)

if (Regex.IsMatch(columnValue.ToString(),"^[A-Za-z0-9 ]+$"))
{
   MessageBox.Show("You may not use special characters.", "Saving not allowed at this time", MessageBoxButtons.OK, MessageBoxIcon.Error); 
}

或作为单个布尔检查来测试

bool isValid = Regex.IsMatch(columnValue, "^[a-z0-9 ]+$", RegexOptions.IgnoreCase);

答案 2 :(得分:0)

在字符类中添加空格,即使用^[A-Za-z0-9 ]$代替^[A-Za-z0-9]$。这仍然会禁止其他空格字符,例如tab

答案 3 :(得分:0)

您可以包含所有数字,字符串和空格:)

"^[a-z]|[A-Z]|[0-9]|[ ]$"

"^[\d+]|[\w+]|[ ]$"

答案 4 :(得分:0)

为什么不试试这个正则表达式:[a-zA-Z0-9\s]+