我如何不允许特殊字符,但在正则表达式中允许空间
本文关键字:许空间 空间 正则表达式 不允许 特殊字符 | 更新日期: 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]+