70

次のようないくつかの IP アドレスがあります。

  1. 115.42.150.37
  2. 115.42.150.38
  3. 115.42.150.50

3 つの IP アドレスすべてを検索するには、どのような正規表現を記述すればよいですか? たとえば、そうすると115.42.150.*(3つのIPアドレスすべてを検索できるようになります)

私が今できることは、次のようなものです。/[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}/しかし、うまく機能しないようです。

ありがとう。

4

22 に答える 22

124

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

有効な 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 digits are allowed
255.0.0.y – only digits are allowed
666.10.10.20 – octet number must be between [0-255]
4444.11.11.11 – octet number must be between [0-255]
33.3333.33.3 – octet number must be 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:31:17.710 に答える
31

あなたが持っている正規表現にはすでにいくつかの問題があります:

まず、ドットが含まれています。正規表現では、ドットは「任意の文字に一致する」ことを意味し、実際のドットだけに一致する必要があります。このためには、それをエスケープする必要があるので、ドットの前にバックスラッシュを置きます。

次に、各セクションの任意の3桁に一致します。これは、0から999までの任意の番号に一致することを意味します。これには、明らかに多くの無効なIPアドレス番号が含まれています。

これは、番号の一致をより複雑にすることで解決できます。このサイトにはそれを行う方法を説明する他の回答がありますが、率直に言って、努力する価値はありません-私の意見では、文字列をドットで分割し、4つのブロックを数値として検証する方がはるかに良いでしょう整数範囲-すなわち:

if(block >= 0 && block <= 255) {....}

お役に立てば幸いです。

于 2010-12-16T12:15:58.487 に答える
19

独自の正規表現を作成したり、コピー ペーストしたりしないでください。おそらく、すべてのエッジ セスをカバーするわけではありません (IPv6 だけでなく、8 進数の IP なども含まれます)。is-ipnpmのパッケージを使用します。

var isIp = require('is-ip');

isIp('192.168.0.1');

isIp('1:2:3:4:5:6:7:8');

ブール値を返します。

反対票を投じる: アクティブに管理されているライブラリを使用する方が、Web サイトからコピーして貼り付けるよりも優れている理由を説明したいですか?

于 2016-08-01T11:42:29.980 に答える
16

これを試してみてください..ここからのソース。

"\b(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]?)\b"
于 2010-12-16T12:16:25.317 に答える
13

最新のブラウザでipv4の正規表現よりも読みやすいものが必要な場合は、

function checkIsIPV4(entry) {
  var blocks = entry.split(".");
  if(blocks.length === 4) {
    return blocks.every(function(block) {
      return parseInt(block,10) >=0 && parseInt(block,10) <= 255;
    });
  }
  return false;
}
于 2014-01-31T15:56:20.893 に答える
3

IP アドレス形式の正規表現:

/^(\d\d?)|(1\d\d)|(0\d\d)|(2[0-4]\d)|(2[0-5])\.(\d\d?)|(1\d\d)|(0\d\d)|(2[0-4]\d)|(2[0-5])\.(\d\d?)|(1\d\d)|(0\d\d)|(2[0-4]\d)|(2[0-5])$/;
于 2013-11-01T13:29:13.630 に答える
2

そして代わりに

{1-3}

あなたが置く必要があります

{1,3}
于 2010-12-16T12:13:33.003 に答える
1
\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b

検索データに無効な IP アドレスが含まれていないことがわかっている場合に使用します

\b(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]?)\b

IP 番号を正確に照合するために使用します。4 つの番号はそれぞれ独自のキャプチャ グループに保存されるため、後でアクセスできます。

于 2010-12-16T12:17:02.470 に答える
1

それは多分良いです:

function checkIP(ip) {
    var x = ip.split("."), x1, x2, x3, x4;

    if (x.length == 4) {
        x1 = parseInt(x[0], 10);
        x2 = parseInt(x[1], 10);
        x3 = parseInt(x[2], 10);
        x4 = parseInt(x[3], 10);

        if (isNaN(x1) || isNaN(x2) || isNaN(x3) || isNaN(x4)) {
            return false;
        }

        if ((x1 >= 0 && x1 <= 255) && (x2 >= 0 && x2 <= 255) && (x3 >= 0 && x3 <= 255) && (x4 >= 0 && x4 <= 255)) {
            return true;
        }
    }
    return false;
}    
于 2013-12-16T11:04:32.403 に答える
1

これは私がやったことであり、高速で完全に機能します:

function isIPv4Address(inputString) {
    let regex = new RegExp(/^(([0-9]{1,3}\.){3}[0-9]{1,3})$/);
    if(regex.test(inputString)){
        let arInput = inputString.split(".")
        for(let i of arInput){
            if(i.length > 1 && i.charAt(0) === '0')
                return false;
            else{
                if(parseInt(i) < 0 || parseInt(i) >=256)
                   return false;
            }
        }
    }
    else
        return false;
    return true;
}

説明: まず、正規表現を使用して、IP 形式が正しいことを確認します。ただし、正規表現は値の範囲をチェックしません。

つまり、Javascript を使用して正規表現を管理できるのであれば、それを使用してみませんか?. したがって、クレイジーな正規表現を使用する代わりに、正規表現を使用して形式が適切であることを確認し、オクテットの各値が正しい値の範囲 (0 ~ 255) にあることを確認します。これが他の誰かに役立つことを願っています。平和。

于 2020-06-11T06:24:01.580 に答える