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

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

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

使用半列来区分字符。我试图为某些字符编写一个正则表达式来validation它是否有效,我会扩展它。它不起作用。 我在这做错了什么。

 Regex.IsMatch(textBox1.Text, @"^[\%\/\\\&\?\,\'\;\:\!\-]+$") 

 ^[\%\/\\\&\?\,\'\;\:\!\-]+$ 

匹配完全由特殊字符组成的字符串。 您需要反转字符类以匹配包含特殊字符的字符串:

 ^[^\%\/\\\&\?\,\'\;\:\!\-]+$ ^--- added 

或者,您可以使用此正则表达式匹配任何包含字母数字字符,连字符,下划线和撇号的字符串。

 ^[a-zA-Z0-9\-'_]$ 

你在评论中提到的正则表达式

 [^a-zA-Z0-9-'_] 

匹配包含除允许的字符之外的任何字符的字符串(但您可能需要转义连字符)。 假设您正确地反转条件(接受匹配的字符串),这也可以

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

 if (input.IndexOfAny(theCharacetrers) != -1) { // Found one of them. } 

之前已经在class级范围内设立过theCharacetrers

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

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

所以,而不是

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

它应该是

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

您可以在此处阅读有关字符串开头和字符串锚点结尾的更多信息

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

您可能只想检查字符串是否包含任何字符@"[\%\/\\\&\?\,\'\;\:\!\-]")就足够了。

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

请在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); } 

由Sharafu Hameed