我有一个文本框,用户将在其中输入网址并提交该网址(需要该网址并在我们的数据库中搜索)
但在它命中之前我想确保其中没有特殊字符:
下面是我正在使用的正则表达式,但仍然接受特殊字符
这里是我试图避免的特殊字符< > % ( ) + ;
这些特殊的字符可以在开头或结尾作为例子:
()+; HTTP://www.site.com/images.jpg()
对于&符号(&amp;)的示例,我使用下面的reg表达式,但不知何故它忽略了开头。
Regex re = new Regex("\\(|\\)|\\<|\\>|\\\"|\\;|\n|\r|\\`|^&|&$");
因此,在我提交上述网址之前,我想要将所有不需要的字符绊倒。
static String StripSpcialChar(String param)
{
String result = null;
if (param != null)
{
Regex re = new Regex("\\&|\\(|\\)|\\<|\\>|\\\"|\\;|\n|\r|\\`");
result = re.Replace(param, "");
result = result.Trim();
}
return result;
}
答案 0 :(得分:3)
这应该涵盖您指定的特殊字符,并正确地从字符串的开头或结尾删除&符号。要在字符串的开头或结尾处考虑多个&符号,您需要使用&+
,+
匹配一个或多个符号。
string input = "&&&()+;http://www.site.com/images.jpg()&&&";
Regex re = new Regex(@"[()<>"";+\n\r`]|^&+|&+$");
string result = re.Replace(input, "");
Console.WriteLine(result);
请注意使用字符类[...]
,它比管道符号的多次更改更清晰。在角色类中,没有必要逃避角色。如果您计划匹配短划线,则应将其放在组的开头或结尾,以避免意外指定一系列字符。例如[()<>"";+\n\r-]
。
答案 1 :(得分:0)
通常你不想逃避自己的参数,最好使用内置的转义功能,比如占位符或C#中的数据库API。
请参阅: