有效URL字符的正则表达式

时间:2014-02-26 10:13:24

标签: c# regex

嘿伙计们,我想在将字符串保存到我的数据库之前检查字符串,

这是一个示例字符串 “油漆与刷子”

现在&无效,我如何使用正则表达式来检测这个,我想检查这些字符的其他字符 £,$,%,#etc

我试过这个

Regex RgxUrl = new Regex(@"[^A-Z0-9.\-\)\(]");

然而之前的“paint& brush”示例仍然有效

3 个答案:

答案 0 :(得分:4)

验证URL是一个常见问题,因此您应首先考虑使用可用的工具来执行此操作,而不是重新发明轮子。然而,从wikipedia

  

未预留

     

可以编码,但没有必要

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~
  

保留

     

有时必须编码

! * ' ( ) ; : @ & = + $ , / ? % # [ ]
  

进一步的细节可以在RFC 3986和http://www.w3.org/Addressing/URL/uri-spec.html中找到。

基于此,您的模式将为[^-\]_.~!*'();:@&=+$,/?%#[A-z0-9]。你想看看这个(独家)模式是否匹配你的字符串中的任何字符,如果是这样,那些可能是必须编码的特殊字符。

RegexBuddy生成的代码:

bool hasInvalidChars = false;
try {
    hasInvalidChars = Regex.IsMatch(urlToTest, @"[^-\]_.~!*'();:@&=+$,/?%#[A-z0-9]", RegexOptions.Singleline | RegexOptions.Multiline);
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

答案 1 :(得分:3)

为什么不

Uri.IsWellFormedUriString(stringURL, UriKind.RelativeOrAbsolute)

了解更多Uri.IsWellFormedUriString Method

Uri.TryCreate Method

答案 2 :(得分:0)

我建议不要使用正则表达式,除非你绝对必须这样做。使用正则表达式意味着您必须测试和维护它。 .NET已经有一个Uri类,您可以使用它来验证字符串是否是有效的URI。

string urlString;
Uri uri;
if (!Uri.TryCreate(urlString, UriKind.RelativeOrAbsolute, out uri)) {
    // it's not a valid URI.
}

您可能希望进一步检查生成的Uri对象以查看它是否为HTTP,但这应该很容易。

当然这只会告诉你整个字符串是否有效,而不是哪个字符不是。如果您想要提供更详细的错误消息,那么此方法将无效。