C# 检查C中不允许使用特殊字符#

C# 检查C中不允许使用特殊字符#,c#,regex,C#,Regex,我必须从不允许的特殊字符列表中验证文本框。 这些都是不允许的字符 "&";"\";"/";"!";"%";"#";"^";"(";")";"?";"|";"~";"+";" "; "{";"}";"*";",";"[";"]";"$";";";":";"=";" 其中半列用于字符之间的分隔。我尝试为一些字符编写正则表达式以验证它是否有效,我将对其进行扩展。它不起作用。 我在这方面做错了

我必须从不允许的特殊字符列表中验证文本框。 这些都是不允许的字符

"&";"\";"/";"!";"%";"#";"^";"(";")";"?";"|";"~";"+";" ";
                                                   "{";"}";"*";",";"[";"]";"$";";";":";"=";"
其中半列用于字符之间的分隔。我尝试为一些字符编写正则表达式以验证它是否有效,我将对其进行扩展。它不起作用。 我在这方面做错了什么

Regex.IsMatch(textBox1.Text, @"^[\%\/\\\&\?\,\'\;\:\!\-]+$")
匹配完全由特殊字符组成的字符串。您需要反转字符类以匹配不包含特殊字符的字符串:

^[^\%\/\\\&\?\,\'\;\:\!\-]+$
  ^--- added
或者,您可以使用此正则表达式匹配任何仅包含字母数字字符、连字符、下划线和撇号的字符串

^[a-zA-Z0-9\-'_]$
你在评论中提到的正则表达式

[^a-zA-Z0-9-'_]
匹配一个字符串,该字符串包含除允许的字符外的任何字符(但可能需要转义连字符)。如果您正确地反转了条件(接受不匹配的字符串),这也可以工作。

您的RegExp是“只包含特殊字符的字符串(因为您有开始/结束标记
^
$

您可能只需要检查字符串是否不包含任何字符
@“[\%\/\\\&\?\,\'\;\:\!\-]”
就足够了


如果您只需要查看源字符串中是否存在任何字符,也可能更合适。

您需要从模式的开头删除^,从模式的结尾删除$,否则,为了匹配字符串,应以特殊字符开头和结尾

"&";"\";"/";"!";"%";"#";"^";"(";")";"?";"|";"~";"+";" ";
                                                   "{";"}";"*";",";"[";"]";"$";";";":";"=";"
因此,与其

@"^[\%\/\\\&\?\,\'\;\:\!\-]+$"
应该是

@"[\%\/\\\&\?\,\'\;\:\!\-]+"

您可以阅读有关字符串起始和字符串结束锚定的更多信息

如果您只是查找任何字符列表,则正则表达式是更复杂的选项。
string.IndexOfAny
将返回任何字符数组的第一个索引或-1。因此检查:

if (input.IndexOfAny(theCharacetrers) != -1) {
  // Found one of them.
}
其中,
先前已在类范围内设置了characetrers

private readonly char[] theCharacetrers = new [] {'&','\','/','!','%','#','^',... };

请在textchange事件中使用此选项

        //Regex regex = new Regex("([a-zA-Z0-9 ._@]+)");
        Regex regex = new Regex("^[a-zA-Z0-9_@(+).,-]+$");
        string alltxt = txtOthers.Text;//txtOthers is textboxes name;
        int k = alltxt.Length;
        for (int i = 0; i <= k - 1; i++)
        {

            string lastch = alltxt.Substring(i, 1);
            MatchCollection matches = regex.Matches(lastch);
            if (matches.Count > 0)
            {

            }
            else
            {

                txtOthers.Text = alltxt.Remove(i, 1);

                i = i - 1;
                alltxt = txtOthers.Text;
                k = alltxt.Length;
            }
            txtOthers.Select(txtOthers.TextLength, 0);
        }
//Regex Regex=new Regex([a-zA-Z0-9.@]+);
正则表达式正则表达式=新正则表达式(“^[a-zA-Z0-9_@(+),-]+$”;
string alltxt=txtOthers.Text;//txtOthers是文本框名称;
int k=alltxt.Length;
对于(int i=0;i 0)
{
}
其他的
{
Text=alltxt.Remove(i,1);
i=i-1;
alltxt=txtOthers.Text;
k=所有TXT.Length;
}
txtOthers.Select(txtOthers.TextLength,0);
}

根据Sharafu Hameed

修改解决方案的最简单方法是删除
^
$
并选中
Regex.IsMatch(textBox1.Text,@“[\%\/\\\&\?\,\';\:\!\-]+”。成功
。您还可以删除“\”,因为您实际上是在用“转义”字符串@“。谢谢@Jan在查看了我的不允许字符列表后,您的更改成功了。我只允许这一组[A-z,A-z,0-9]任何东西在外面,这是不允许的。因此,如果我只为这个[A-z,A-z,0-9]添加一个小的检查,将比编写完整的列表更容易。那么,对于小集合来说,这是正确的“[^a-zA-Z0-9-”\”。不接受viewmodel的字符串值“-1”的数据表示法是什么?