4

当用户在 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 语句,应该允许。

如何让它允许一个空格,但不允许特殊字符?

谢谢,

4

5 回答 5

12

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

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]$"))

更新

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

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

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

但是如果你想在你的正则表达式中写一个被排除的字符组,你可以^在你的组中放一个。当^位于组内时,[^]它后面的任何字符都将被排除在匹配之外。

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

如果那是您正在寻找的内容,您可以将您的声明更改为:

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

该语句将匹配包含任何不在组中的字符的任何字符串。因此,如果他们键入“Hello World”,它将不匹配。如果他们输入“Hello!World”,它会匹配,因为“!” 不在组内。

注意:前导^和尾随$已删除。在这个正则表达式中,我们不关心字符串的长度,因为我们只匹配字符串中任何我们不期望的字符。

于 2012-12-31T21:20:13.363 回答
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);
于 2012-12-31T21:22:09.180 回答
1

你可以包括所有的数字、字符串和空格:)

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

或者

"^[\d+]|[\w+]|[ ]$"
于 2012-12-31T21:20:34.013 回答
0

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

于 2012-12-31T21:22:04.690 回答
0

在字符类中添加一个空格,即使用^[A-Za-z0-9 ]$而不是^[A-Za-z0-9]$. 这仍然不允许其他空白字符,例如tab.

于 2012-12-31T21:19:15.370 回答