0

我需要对 CS 表单进行 URL 验证。我已经有一个脚本可以检查 http 并在不存在时添加它。但是,如果我添加另一个函数来进行验证,无论我把它放在哪里,它都会返回 URL 无效。

这就是我正在运行的

<script type="text/javascript">
$(function(){
$('.url').blur(function(e) {
    if ($(this).val().match(/^http/) || $(this).val().match(/^https/)) /*define the    http & https strings */ {
        $.noop() /*if strings exist, do nothing */
    }
    else {
        // get value from field
        var cur_val = $(this).val(); 
        // do with cur_val
        $(this).val('http://' + cur_val);
    }        

});

});  

</script>

这是我用于验证的第二个函数:

<script type="text/javascript">
function validate() {
    var url = document.getElementById("url").value;
    var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
    if (pattern.test(url)) {
        alert("Url is valid");
        return true;
    } 
        alert("Url is not valid!");
        return false;

}
</script>

我究竟做错了什么?我试图合并这两个函数,但我的 js 技能选择了失败的那一刻。

谢谢!

4

2 回答 2

1

我不知道,如果这正是你要找的,

var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;

pattern.test("http://google.com");   // True
pattern.test("google.com");          // False

您使用的 if 条件是无用的,因为无论如何您都会返回模式匹配的结果。

所以更新后的Validate函数应该简单地返回模式结果 & 应该如下所示:

function validate() {

    var url = document.getElementById("url").value; 

    var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;

    return pattern.test(url);
}

假设有一个 id 为url的 DOM 元素。

于 2013-03-28T14:10:51.467 回答
0

乍一看,您的“添加 http”功能似乎正在寻找带有 . 的标签class="url",而 validate 功能正在寻找带有 . 的标签id="url"。如果你没有那个 id,那么我想它总是会返回无效的。

于 2013-03-28T14:10:34.347 回答