正则表达式用于URL验证

20

我已经编写了一个正则表达式来验证URL,它可能是以下任一格式:

google.com

www.google.com

http://www.google.com

https://www.google.com

我使用过

Regex urlRx = new Regex(@"^(http|ftp|https|www)://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?$", RegexOptions.IgnoreCase);

它适用于http和https协议。但无法用于google.com和www.google.com。

请帮我解决这个问题。

谢谢


4
иҝҷжҳҜдёҖдёӘжјӮдә®зҡ„зҪ‘йЎөпјҢеұ•зӨәдәҶи§Јжһҗ URL зҡ„дёҚеҗҢжӯЈеҲҷиЎЁиҫҫејҸзҡ„жҜ”иҫғпјҡhttp://mathiasbynens.be/demo/url-regexгҖӮжңҖеҘҪзҡ„жӯЈеҲҷиЎЁиҫҫејҸжҳҜпјҡ _^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:.\d{1,3}){3})(?!127(?:.\d{1,3}){3})(?!169.254(?:.\d{1,3}){2})(?!192.168(?:.\d{1,3}){2})(?!172.(?:1[6-9]|2\d|3[0-1])(?:.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)[a-z\x{00a1}-\x{ffff}0-9]+)(?:.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)[a-z\x{00a1}-\x{ffff}0-9]+)*(?:.(?:[a-z\x{00a1}-\x{ffff}]{1,63}|xn--[\x{00a0}-\x{ffff}]{1,59})(?:.[a-z\x{00a1}-\x{ffff}]{2,})?)$гҖӮ - Jakub Konecki
我使用了这个(不包括ftp)|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)(:[0-9]+)?(/.)?$|i - AjayR
它适用于www.google.com吗? - PrateekSaluja
请注意,对于简单的情况,这很简单,但对于复杂的情况(例如带有查询字符串或URL中的特殊字符),这并不简单... - Benjol
4个回答

61

我认为不需要使用正则表达式-尝试使用

Uri.IsWellFormedUriString(YourURLString, UriKind.RelativeOrAbsolute)

请查看 MSDN


1
请测试此消息。 "你好,你怎么样?www.google.com" - PrateekSaluja
10
注意,只使用这种方式验证URL可能存在问题,因为它允许像javascript:alert('Invitation to hack me');这样的URI。 - Joseph Woodward
1
@Yahia - 你的回答允许非Web URL(例如文件路径),而我认为OP希望确保URL是有效的http / https URL。 - Matthew
1
如果您需要客户端验证,这种方法就不起作用了。当然,这并不是OP所问的...只是发表一下评论。 - Eric Burdo
@JosephWoodward - 那绝对是正确的。解决方法是使用 Uri.IsWellFormedUriString(Request.Url.ToString(), UriKind.Absolute)。由于 UriKind 是绝对的,它将捕获此类错误,然后当我们捕获它时,我们可以显示错误页面、记录它或执行任何需要处理错误的操作! - Akshay Mahajan
显示剩余3条评论

6
将协议部分放在可选的组内,例如()?
^((http|ftp|https|www)://)?([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?$

3
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^((http|ftp|https|www)://)?([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?$");这是一行代码,用于创建一个正则表达式对象。它可以验证一个字符串是否为一个有效的URL地址。代码中包含了一些特殊字符和符号用于匹配URL的不同部分。 - brandeded

3
我从jquery.validation获取了这段代码(我进行了一些编辑)。

bool isValid = (Regex.IsMatch(value, @"(((([a-z]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'()*+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))).)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))).?)(:\d*)?)(/((([a-z]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'()*+,;=]|:|@)+(/(([a-z]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'()*+,;=]|:|@)))?)?(\?((([a-z]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'()*+,;=]|:|@)|[\uE000-\uF8FF]|/|\?)*)?(#((([a-z]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'()*+,;=]|:|@)|/|\?)*)?$"));


该代码段用于验证一个字符串是否为合法的电子邮件地址,其中使用了正则表达式的匹配规则。

我搜索了整整一天,这是我找到的最好的结果。以下是一些有效的示例:

  1. example.com
  2. example.com.ph
  3. www.example.com
  4. http://example.com
  5. https://example.com
  6. http://www.example.com
  7. ftp://example.com
  8. example.com/doc
  9. www.example.com/doc
  10. http://example.com/doc
  11. http://example.com/questions/12576252/convert-javascript-regex-to-c-sharp-regex-for-email-validation
  12. http://www.example.com/wpstyle/?p=364
  13. http://userid:password@example.com:8080
  14. https://www.example.com/foo/?bar=baz&inga=42&quux
  15. LDAP://ad1.cc.uq.edu.ph

我尝试了这个,但对于像这样的电话号码返回了一个错误的结果:(937) 555-1212 - DonBoitnott

0
^(http|http(s)?://)?([\w-]+\.)+[\w-]+[.com|.in|.org]+(\[\?%&=]*)?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接