提交不带任何特殊字符的 URL

本文关键字:URL 特殊字符 任何 提交 | 更新日期: 2023-09-27 17:56:55

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

但是在它到达数据库之前,我想确保其中没有特殊字符:

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

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

()+;http://www.site.com/images.jpg()

对于与号 (&) 的示例,我使用以下 reg 表达式,但不知何故它忽略了开头。

Regex re = new Regex("''(|'')|''<|''>|'''"|'';|'n|'r|''`|^&|&$"); 

因此,在提交上述URL之前,我想绊倒所有不需要的Caracters。

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;         
} 

提交不带任何特殊字符的 URL

这应该涵盖您指定的特殊字符,并正确去除字符串开头或结尾的 & 符号。要考虑字符串开头或结尾的多个与号,您需要使用 &+ ,其中+与一个或多个与号匹配。

string input = "&&&()+;http://www.site.com/images.jpg()&&&";
Regex re = new Regex(@"[()<>"";+'n'r`]|^&+|&+$");
string result = re.Replace(input, "");
Console.WriteLine(result);

请注意字符类 [...] 的使用,它比使用管道符号的多次交替要干净得多。在字符类中,无需对字符进行转义。如果您打算匹配破折号,则应将其放在组的开头或结尾,以避免意外指定字符范围。例如[()<>"";+'n'r-] .

通常你不想自己转义参数,最好使用内置的转义功能,如占位符或 C# 中的数据库 API 具有的任何功能。

看:

  • http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx
  • http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx