1

IPv4 アドレスを検証する関数を作成しようとしています。

すべて問題ないように見えますが、正しいクラスを選択していないようです。

私のコードはここにあります: http://jsfiddle.net/felix001/X7EuJ/23/

<label for="input">IP</label>
<input type="text" name="input"  id="input" size="22" />
<input type="submit" value="submit" "whatmask_input" id="submit"  align="right" />

JavaScript:

function ipv4addr(x) {
    var REGEX = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
    if ($x != $REGEX) {
        $("#input").addClass(".bad");
    }
    else {
        $("#input").addClass(".good");
    }
}

$(document).ready(function() {
    $("#submit").click(ipv4addr("#input"));

});

この問題をトラブルシューティングする最善の方法を誰か教えてもらえますか?

ありがとう、

4

2 に答える 2

2

フィドラー ページを開いている間に、ブラウザの開発ツール コンソールを ( Chromeなどで) ロードします。

最初のエラーは次のとおりです。

ReferenceError: Can't find variable: $x

$foo変数名の前に $を付ける必要はなく、foo2 つの異なる変数名です。がある場合はvar foofoo変数名です。

そして、コードを見ると、これはおそらくあなたが期待することをしません:

$("#submit").click(ipv4addr("#input"));

それは次のようになります:

var result = ipv4addr("#input");
$("#submit").click(result);

つまり、呼び出しの戻り値ipv4addr(常に未定義) を click メソッドに渡します。おそらく、代わりにクリックごとに呼び出される関数を渡したいでしょう。

于 2012-06-06T19:57:01.597 に答える
1

この機能を試してください:

function isDottedIPv4(s)
{
 var match = s.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
 return match != null &&
        match[1] <= 255 && match[2] <= 255 &&
        match[3] <= 255 && match[4] <= 255;
}

isDottedIPv4("127.0.0.001") // true
isDottedIPv4("448.90210.0.65535") // false
isDottedIPv4("microsoft.com") // false
于 2012-06-06T19:56:30.487 に答える