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

时间:2012-10-25 06:35:06

标签: c# regex

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

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

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

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

5 个答案:

答案 0 :(得分:4)

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

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

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

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

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

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

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

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

答案 1 :(得分:4)

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

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

之前已在类范围设置theCharacetrers

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

答案 2 :(得分:2)

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

所以,而不是

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

应该是

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

您可以阅读有关字符串开头和字符串锚定结束here

的更多信息

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

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

BY Sharafu Hameed