2

最後にのみ発生する可能性があるワイルドカード文字 (*) のサポートを含め、IP アドレスを検証するための適切な RegEx を取得できないようです。例えば:

有効

1.2.*
1.2.3.*
1.2.3.4

有効ではありません

1
1.2
1.2*
1.2.3
1.2.3*
1.*.3.4

私は近づいてきました(そしてここでいくつかの同様の質問/回答を見つけました)が、すべてのシナリオを合格/不合格にすることはできません. 誰でも私を助けることができますか?ところで-オクテットが0〜255であることを検証する必要はありませんが、クールです。

4

6 に答える 6

2

このようなもの:

^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(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]?)\.){3}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}\*))$

第2版​​:

^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(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]?)\.){1,3}\*))$
于 2012-07-02T21:58:40.597 に答える
1

すべて 1 行で:

^\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})))))))$

内訳:

^\*|                                           # Treat '*' by itself as valid or
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.       # Basic octet pattern plus...
(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\. # Wildcard, or 2nd octet plus...
(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\. # Wildcard, or 3rd octet plus...
(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}   # Wildcard or last octet
)))))))$                                       # Close up shop
于 2012-07-03T00:07:08.570 に答える
0

最大 3 つの部分に一致し、次にワイルドカードまたは通常の IP に一致します。

^((\d{1,3}\.){1,3}\*|(\d{1,3}\.){3}\d{1,3})$

または、数値も検証する場合は、\d{1,3}s をに変更し(1?\d?\d|2[0-4]\d|25[0-5])ます。

于 2012-07-02T21:55:34.830 に答える
0

正規表現:

\b((?:(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(?\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])|(?\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){0,3}\*))\b

文字列全体が IP アドレスであることを検証する場合は、(beginning) と\b( end) に置き換えます。それ以外の場合は、文字列内の一致を探します。^$

于 2012-07-02T22:02:54.220 に答える
-1
^(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2}))(?:(?:(?:\.(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2})))){3}|(?:\.(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2}))){0,2}\.\*)$

構築を表示し、結果を検証するための短い Ruby スクリプトを次に示します。

#!/usr/bin/env ruby

octet2 = /(?:\d{1,2})/
octet3 = /(?:[0-1]\d\d|2[0-4]\d|25[0-5])/
octet = /(?:#{octet3}|#{octet2})/
dot_octet = /(?:\.#{octet})/

trailing_wild_ip = /^#{octet}(?:(?:#{dot_octet}){3}|#{dot_octet}{0,2}\.\*)$/

%w{
1.2.*
1.2.3.*
1.2.3.4
1
1.2
1.2*
1.2.3
1.2.3*
1.*.3.4
}.
  map {|ip| [ip, ip.match(trailing_wild_ip) ? 'valid' : 'invalid' ] }.
  each {|ip,match| puts "#{ip} => #{match}" }


# output:
1.2.* => valid
1.2.3.* => valid
1.2.3.4 => valid
1 => invalid
1.2 => invalid
1.2* => invalid
1.2.3 => invalid
1.2.3* => invalid
1.*.3.4 => invalid
于 2012-07-02T22:13:54.897 に答える
-1

素敵で短い

^((\d+\.){3}\d+|(\d+\.){1,3}\*)$

行頭/行末で ^ と $ を一致させる正規表現修飾子を使用

于 2012-07-02T22:36:38.743 に答える