2016-04-15 8 views
0

を与えるために、私は第一項のすべてのIPV4がどの正規表現IPv4アドレスが無効な応答

var regex = new RegExp(/^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/); 

regex.test('140.1.2.3'); // gives false should give true 

0アドレスフィルタリングするには、

は何変更する必要がある偽与えますか?

+0

2つの '\\ d'があることに注意してください。' \ d'にする必要があります。 'RegExp'コンストラクタを使う必要はありません。 2 [0-4] \ d | 25 [0-5] \。([01]?\ d \ d?2 [0-4] ([01]?\ d \ d?| 2 [0-4] \ d | 25 [0-5])\。([01]?\ d \ d ?| 2 [0-4] \ d | 25 [0-5])$ '](https://regex101.com/r/dS4rX7/1)。それは単にタイプミスですか? –

+0

これは0.0.0.0を許可します0.0.0.0と255.255.255.255をブロックしたい – user544079

+2

これは唯一追加された要件ですか、それとも後で "buts"を追加するのですか?あなたの質問を更新してください。 –

答えて

1

あなたがIPv4アドレスのリストを持っていて、それをフィルタリングしたい場合は、派手な検証スタイルの正規表現の必要はありません。ここにあなたのケースのために修正さBen Mc Cormick's functionです:

function checkIsIPV4(entry) { 
 
    if (entry === "0.0.0.0" || entry === "255.255.255.255") { 
 
    return false; 
 
    } 
 
    var blocks = entry.split("."); 
 
    if(blocks.length === 4) { 
 
    return blocks.every(function(block) { 
 
     return parseInt(block,10) >=0 && parseInt(block,10) <= 255; 
 
    }); 
 
    } 
 
    return false; 
 
} 
 
var strs = ["100.1.2.3", "0.0.0.0", "0.0.0.1", "255.255.255.254", "255.255.255.255", "255.255.255.256"]; 
 
for (var s of strs) { 
 
    document.body.innerHTML += s + ": " + checkIsIPV4(s) + "<br/>"; 
 
}

あなたが本当にすべてのゼロを除いたすべてのIPアドレスとすべての255 Sと一致します検証スタイルの正規表現を使用する必要がある場合:

var re = /^(?!(?:0(?:\.0){3}|255(?:\.255){3})$)([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/; 

regex demo

はじめに、y ouは正規表現のリテラルで単一のものを必要とする間に二重のバックスラッシュを持っていました。 0.0.0.0255.255.255.255を禁止するのは負の先読み(?!(?:0(?:\.0){3}|255(?:\.255){3})$)です。

関連する問題