嘿伙计们,我想在将字符串保存到我的数据库之前检查字符串,
这是一个示例字符串 “油漆与刷子”
现在&无效,我如何使用正则表达式来检测这个,我想检查这些字符的其他字符 £,$,%,#etc
我试过这个
Regex RgxUrl = new Regex(@"[^A-Z0-9.\-\)\(]");
然而之前的“paint& brush”示例仍然有效
答案 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)
答案 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,但这应该很容易。
当然这只会告诉你整个字符串是否有效,而不是哪个字符不是。如果您想要提供更详细的错误消息,那么此方法将无效。