Skip to main content
 首页 » 编程设计

c#之我如何不允许特殊字符,但在正则表达式中允许空格

2024年01月18日29xing901022

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

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

谢谢,

请您参考如下方法:

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

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]将匹配任何字符 不是 A-Z。

如果这就是您要查找的内容,您可以将您的声明更改为:
if (Regex.IsMatch(columnValue.ToString(), @"[^A-Za-z0-9\ ]")) 

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

注:领先 ^和尾随 $被移除。在这个正则表达式中,我们不关心字符串的长度,因为我们只匹配字符串中我们不希望出现的任何字符的字符。