【问题标题】:<input> tag validation for URLURL 的 <input> 标记验证
【发布时间】:2012-11-29 00:27:21
【问题描述】:

我正在尝试使用 JavaScript 验证 URL,但由于某种原因它无法正常工作。当有人没有输入任何 URL 时,它会显示如下消息:

请输入有效的网址。(即 http://)

我正在尝试修复它,但无法使其正常工作。

HTML5 中有什么技巧可以验证 URL 吗?

$(document).ready(function() { 
$("#contactInfos").validate( 
 { onfocusout: false, rules: { 
       phone: { number:true }, 
       zipcode: { number:true }, 
       website: {    url:true    } 
 }, 
     messages: { phone: { number:"please enter digit only" }, 
     zipcode: { number:"Plese enter digit only"  }, 
     website: { url: "Please enter valid URL.(i.e. http://)"     } 
   } 

});

验证 URL 的方法:

url: function(value, element) {
      values=value.split(',');
      for (x in values)
      {
          temp=values[x].trim();
  temp1=this.optional(element) || /^(https?|ftp):\/\/(((([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})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(temp);

      if(temp1!=true)
      {
        return false;
      }
      }
       return true;
},

【问题讨论】:

  • 这是代码 $(document).ready(function() { $("#contactInfos").validate( { onfocusout: false, rules: { phone: { number:true }, 邮编: { number:true }, website: { url:true } }, messages: { phone: { number:"please enter digit only" }, zipcode: { number:"Plese enter only digit only" }, website: { url: "请输入有效的 URL。(即 http://)" } } }); 我用过 jquery,但不工作:(
  • 您调用了方法名称验证。该方法的代码在哪里?我还编辑了您的帖子以包含您在上面粘贴的代码。此外,您在上面粘贴的代码会以当前格式产生错误。
  • @PrinceBijvani:如果您设置一个 jsFiddle (jsfiddle.com) 来显示您的尝试和问题,那么这里的人会最容易帮助您。
  • @TommyBs 我已经在上面编辑过了
  • @FrankvanPuffelen jsfiddle.com 不工作:(

标签: javascript html validation


【解决方案1】:

在 html5 中可以使用标签输入 type="url":

<input type="url" />

您也可以使用自己的模式:

<input type="url" pattern="https?://.+" required /> 

在统一资源标识符 (URI):通用语法 [RFC3986] http://www.ietf.org/rfc/rfc3986.txt 论文中,URI 的正则表达式为:

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

例如,将上面的表达式匹配到

  http://www.ics.uci.edu/pub/ietf/uri/#Related

导致以下子表达式匹配:

  $1 = http:
  $2 = http
  $3 = //www.ics.uci.edu
  $4 = www.ics.uci.edu
  $5 = /pub/ietf/uri/
  $6 = <undefined>
  $7 = <undefined>
  $8 = #Related
  $9 = Related

【讨论】:

【解决方案2】:

如果没有协议,url 是否有效是否有意义?

例如,当前http://google.com 是一个有效的网址,而google.com 不是。

同样,http://localhost 是一个有效的 url,而localhost 不是一个有效的 url。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2015-04-03
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多