提交不带任何特殊字符的 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;
}
这应该涵盖您指定的特殊字符,并正确去除字符串开头或结尾的 & 符号。要考虑字符串开头或结尾的多个与号,您需要使用 &+
,其中+
与一个或多个与号匹配。
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