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

本文关键字:许空间 空间 正则表达式 不允许 特殊字符 | 更新日期: 2023-09-27 17:50:21

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

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。 如果你想匹配完全相反的东西,你可以在你的Regex.IsMatch之前使用 not 运算符!,比如:

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",它将不匹配。 如果他们输入"你好!世界"它将匹配,因为"!"不在组中。

注:前导^和尾随$已被移除。 在这个正则表达式中,我们不关心字符串的长度,因为我们只匹配一个我们没有预料到的字符串中的字符。

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);

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

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

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

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

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