提交没有任何特殊字符的网址

时间:2011-05-18 14:17:02

标签: c# regex

我有一个文本框,用户将在其中输入网址并提交该网址(需要该网址并在我们的数据库中搜索)

但在它命中之前我想确保其中没有特殊字符:

下面是我正在使用的正则表达式,但仍然接受特殊字符

这里是我试图避免的特殊字符< > % ( ) + ;这些特殊的字符可以在开头或结尾作为例子:

()+; 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;         
} 

2 个答案:

答案 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。

请参阅: