【问题标题】:How do I check if value is an Url?如何检查值是否为 URL?
【发布时间】:2012-09-15 00:37:59
【问题描述】:

这个脚本应该检查提交的值是否是一个 Url,但它没有这样做。我对正则表达式不太熟悉,为我做这个的朋友出去旅行了。

      <script type="text/javascript">// <![CDATA[
       window.onload=init;

        function init(){
        document.forms[0].onsubmit= function (){
        var url= document.getElementById("url").value;
        var desc= document.getElementById("description").value;
        var regex=new RegExp("^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$");
        var match=regex.test(url);
        if(!match)
        {
            alert("The URL you entered is not valid");
            return false;
        }
        if(desc.length<10)
        {
            alert("There must be at least 10 characters in the description");
            return false;
        }
    };
}
  // ]]></script>

【问题讨论】:

    标签: php forms url


    【解决方案1】:
    if(/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\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])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\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})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([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})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([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(url)) {
        alert("URL is valid");
    }
    else {
        alert("URL is not valid");
    }
    

    来源:here

    【讨论】:

      【解决方案2】:

      我建议你开始学习正则表达式。他们学起来很有趣。我目前也在学习它们。 Jeffrey E.F. Friedl 的 O'reilly's Mastering Regular Expressions 是一本非常好的书,您可以从一些网站免费下载。看看吧。

      【讨论】:

        【解决方案3】:

        PHP 5 有一个内置函数。你可以使用filter_var() 来做。

        function is_url($url)
        {
            return filter_var($url, FILTER_VALIDATE_URL) !== false;
        }
        

        编辑:客户端验证只是为了方便用户。它实际上并没有验证数据,我可以使用 Firefox TamperData 向您提交我想要的任何内容。 您应该按照上面所示进行服务器验证。

        【讨论】:

        • 由于某种原因无法正常工作,您能告诉我在我的开篇文章中的脚本中的确切位置吗?
        • 这不是 Javascript,这是 PHP。正如我之前所说:Client validation is only a convenience for the user. It doesn't actually validate the data, and I could just use Firefox TamperData to submit you whatever I want in there. You should do server validation instead as shown above. 为了方便客户端,您遇到了很多麻烦,但您的服务器仍然容易受到攻击。
        猜你喜欢
        • 1970-01-01
        • 2012-10-29
        • 2015-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 2020-07-05
        相关资源
        最近更新 更多