【问题标题】:Problem in URL validation using ASP.Net Regular Expression Validator使用 ASP.Net 正则表达式验证器进行 URL 验证的问题
【发布时间】:2011-05-12 12:29:25
【问题描述】:

我正在尝试使用 ASP.Net 正则表达式验证器来验证 URL 字段。网址是www.tachibana.co.jp/tokyosys.htm。使用的验证表达式是ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?",但这不起作用。正则表达式或 URL 有什么问题吗?

规则如下。

  1. 即使 (http 或 https) 是否包含在内。
  2. 它还应该在 URL 之前修剪 验证。
  3. 它还应该验证子 域网址
  4. 它还应该验证 URL 的 域或子域上的文件。

谢谢

【问题讨论】:

  • 如果解决了您的问题,请标记答案
  • @Tim Pietzcker - 如果有,它应该忽略 URL 前后的任何额外空格。

标签: asp.net regex validation


【解决方案1】:

问题是你的正则表达式

http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

要求 URL 以 http://https:// 开头。此外,字符类中的破折号放错了位置。

编辑:既然您已经发布了规则,我建议这样做:

^\s*((?:https?://)?(?:[\w-]+\.)+[\w-]+)(/[\w ./?%&=-]*)?\s*$

成功匹配后,组 1 将包含域,组 2 将包含文件路径(如果存在)。

【讨论】:

  • 我尝试通过添加 http 或 https 但仍然失败。 URL 可以包含任意数量的点,这可能是服务器上文件的 url(如问题)或默认页面的 url,如msn.com
  • 如果我只在文本框中提供 msn.com,第二个验证失败。
  • @Umar:那么,您验证 URL 的规则是什么?你可以使用(http(s)?://)?([\w-]+\.)+[\w-]+(/[\w ./?%&=-]*)?,但这可能会允许你不想允许的东西。
【解决方案2】:
^(?i)(http|ftp|https)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$

【讨论】:

  • @Pankaj:谢谢 - 第一个工作正常,但区分大小写。如果末尾有任何单个空格,也会使 url 无效。
  • 整个 url 应该不区分大小写。 HTTP://www.msn.com 对给定的表达式无效。如果有的话,它还应该修剪多余的空间。
  • 这些表达式不是你需要的;他们错误地将顶级域限制为 2 或 3 个字符(.mobi 或 .info 呢?),并且似乎根本不尝试允许文件名。
  • 我从不保存显示网址以HTTP://www.msn.com 开头的网站,而是应该像msn.com 这样我们可以使用^(http|ftp|https)\://[a-zA -Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$
  • @Umar - 我不会尝试使用 Pankaj 的答案;他似乎没有读过你的问题。他的表达式不允许在 URL 中包含文件名。它甚至没有尝试。
【解决方案3】:
"(http(s)?://)?([\www]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?" 

【讨论】:

    【解决方案4】:
    var re = /(http(s)?:\\)?([\w-]+\.)+[\w-]+[.com|.in|.org]+(\[\?%&=]*)?/
    if (re.test(txt)) {
    alert('Valid URL')
    }
    

    您可以在com,in,org的最后一个字段中添加需要的域

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多