2

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

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

半列仅用于分隔字符。我尝试为某些字符编写正则表达式以验证它是否有效,我将扩展它。它不起作用。我在这方面做错了什么。

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

5 回答 5

4

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

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

theCharacetrers以前在类范围内设置的位置:

private readonly char[] theCharacetrers = new [] {'&','\','/','!','%','#','^',... };
于 2012-10-25T07:28:25.393 回答
4
^[\%\/\\\&\?\,\'\;\:\!\-]+$

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

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

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

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

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

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

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

于 2012-10-25T06:40:27.247 回答
2

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

所以,而不是

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

它应该是

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

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

于 2012-10-25T07:04:32.697 回答
1

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

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

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

于 2012-10-25T06:41:43.900 回答
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);
        }

作者:沙拉夫哈米德

于 2014-02-24T06:02:58.087 回答