0

正規表現でIPアドレスの範囲を確認したいのですが、この方法を使用していましたが、うまく機能しています

function validate_ip(ip)
{
       // See if x looks like an IP address using our "almost IP regex".
    var regex = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
    var match = regex.exec(ip);
    if (!match) return false;
    // Additional code to check that the octets aren't greater than 255:
    for (var i = 1; i <= 4; ++i) {
        if (parseInt(match[i]) > 255) 
            return false;
    }
    return true;
}

今、範囲と構文のチェックを正規表現だけで実行したいのですが、これはできますか?

4

3 に答える 3

4

最も簡単なアプローチは、さまざまなケースを調べることです。

25[0-5]|2[0-4]\d|1?\d\d?

これは 0 から 255 までの数字に一致し、055 のようなプレフィックスのゼロは許可されません。

ゼロを除外する場合:

25[0-5]|2[0-4]\d|1\d\d|[1-9]\d?
于 2013-01-24T14:43:00.700 に答える
2

1 から 255 までの数値を表す数字の正規表現は次のようになります。

/[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]/
// next try, allowing 0:
/[1-9]?\d|1\d\d|2[0-4]\d|25[0-5]/

parseIntusingの方がはるかに読みやすく、エラーが発生しにくく、保守しやすいことを認めると思います。

さらに短くすることもできます:

/^\d{1,3}(\.\d{1,3}){3}$/.test(ip) && ip.split(".").every(function(octet) {
    return parseInt(octet, 10) < 256;
});

(ES5everyメソッドを使用し、レガシー ブラウザの場合は shim が必要になる場合があります)

于 2013-01-24T14:42:02.883 に答える
0

遅くなるかもしれませんが、誰かが試すことができます:

有効な IP アドレスの例

115.42.150.37
192.168.0.1
110.234.52.124

無効な IP アドレスの例

    210.110 – must have 4 octets
    255 – must have 4 octets
    y.y.y.y – only digit has allowed
    255.0.0.y – only digit has allowed
    666.10.10.20 – digit must between [0-255]
    4444.11.11.11 – digit must between [0-255]
    33.3333.33.3 – digit must between [0-255]

IP アドレスを検証する JavaScript コード

function ValidateIPaddress(ipaddress)   
{  
 if (/^(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]?)$/.test(ipaddress))  
  {  
    return (true)  
  }  
alert("You have entered an invalid IP address!")  
return (false)  
}  
于 2014-12-12T00:33:32.793 に答える