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>

これは、検証に使用した 2 番目の関数です。

<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>

私は何を間違っていますか?2 つの関数をマージしようとしましたが、私の 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"、検証機能は のタグを探していますid="url"。そのIDに何もない場合は、常に無効になると思います。

于 2013-03-28T14:10:34.347 に答える