【问题标题】:Regular Expression for URL validationURL 验证的正则表达式
【发布时间】:2012-02-15 06:42:48
【问题描述】:

我已经编写了正则表达式来验证 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。

请帮我解决这个问题。

谢谢

【问题讨论】:

  • 这是一个不错的页面,其中比较了解析 url 的不同正则表达式: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]))|(?:(?:[az\x{00a1}-\x{ffff}0-9]+-?)*[az\x{00a1}-\x {ffff}0-9]+)(?:\.(?:[az\x{00a1}-\x{ffff}0-9]+-?)*[az\x{00a1}-\x{ ffff}0-9]+)*(?:\.(?:[az\x{00a1}-\x{ffff}]{
  • 我用的是这个(没有ftp)|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(: [0-9]+)?(/.*)?$|i
  • 它适用于 www.google.com 吗?
  • 请注意,对于简单的情况,这很简单,对于复杂的情况(例如,带有查询字符串或 url 中的特殊字符),这并不简单......

标签: c# .net regex


【解决方案1】:

恕我直言,不需要正则表达式 - 试试

Uri.IsWellFormedUriString(YourURLString, UriKind.RelativeOrAbsolute)

MSDN

【讨论】:

  • @PrateekSaluja 我不确定我是否理解 - YourURLString 只是普通的字符串......还是有一个普通的文本,中间有一些链接?
  • 请测试此消息。 “你好,你好吗?www.google.com”
  • 小心将其用作验证 URL 的唯一方法,因为它允许使用诸如 javascript:alert('Invitation to hack me'); 之类的 URI
  • @Yahia - 您的回答允许使用非 Web URL(例如文件路径),我认为 OP 正在寻求确保 URL 是有效的 http/http URL。
  • 如果您需要客户端验证,这不起作用。当然,这不是 OP 所要求的……只是发表评论。
【解决方案2】:

将协议部分放在一个可选组中,即()?

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

【讨论】:

  • System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^((http|ftp|https|www)://)?([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?$");
【解决方案3】:

我从 jquery.validation 得到这段代码(我做了一些修改)

bool isValid = (Regex.IsMatch(value, @"((([az]|\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]))|((([az]|\d|[\u00A0-\uD7FF\uF900 -\uFDCF\uFDF0-\uFFEF])|(([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|-|.| |~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0- \uFFEF]))).)+(([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([az]|[\u00A0-\uD7FF\uF900-\ uFDCF\uFDF0-\uFFEF])([az]|\d|-|.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az] |[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))).?)(:\d*)?)(/((([az]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'()*+,;=] |:|@)+(/(([az]|\d|-|.||~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[ \da-f]{2})|[!\$&'()*+,;=]|:|@)))?)?(\?((([az] |\d|-|.||~|[\u00 A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'()*+,;=]|:|@)| [\uE000-\uF8FF]|/|\?)*)?(#((([az]|\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
【解决方案4】:
^(http|http(s)?://)?([\w-]+\.)+[\w-]+[.com|.in|.org]+(\[\?%&=]*)?

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2015-09-07
    • 2013-08-24
    • 2011-07-30
    • 2012-03-29
    • 2010-09-17
    • 2011-08-02
    相关资源
    最近更新 更多