メインコンテンツまでスキップ
バージョン: 26.x

IPタイプへのキャスト

IPタイプは、IPv4とIPv6タイプを含むIPアドレスの格納と処理に使用されます。IPv4はuint32として格納され、IPv6はuint128として格納されます。

IPv4へのキャスト

String から

Strict Mode

BNF Definition
<ipv4> ::= <whitespace>* <octet> "." <octet> "." <octet> "." <octet> <whitespace>*

<octet> ::= <digit> | <digit><digit> | <digit><digit><digit>

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
ルール説明

IPv4アドレスは、ドットで区切られた4つの数値セグメントで構成されます:number.number.number.number、例:192.168.1.1。各セグメントは0から255の範囲内である必要があります。数値は先頭にゼロを含むことができます。アドレスの前後には任意の数の空白文字(スペース、タブ、改行など)を含めることができます。

フォーマットが適合しない場合、エラーが報告されます。

Input StringParse ResultComment
"192.168.1.1"Success標準的な有効なアドレス
"0.0.0.0"Success最小値境界
"255.255.255.255"Success最大値境界
"10.20.30.40"Success通常のアドレス
" 192.168.1.1 "Success前後に空白文字を含むことができる
"192.168.01.1"Success先頭ゼロが許可される(01 = 1)
"1.2.3"Errorセグメントが3つのみ(4つ必要)
"1.2.3.4.5"Errorセグメントが5つ(4つ必要)
"256.0.0.1"Error最初のセグメントが255より大きい(256は範囲外)
"1.300.2.3"Error2番目のセグメントが255より大きい
"1.2.3."Error4番目のセグメントが欠落
".1.2.3"Error最初のセグメントが欠落
"1..2.3"Error2番目のセグメントが欠落
"a.b.c.d"Error数値以外の文字
"1.2.+3.4"Error符号+は無効

非厳密モード

BNF定義
<ipv4> ::= <whitespace>* <octet> "." <octet> "." <octet> "." <octet> <whitespace>*

<octet> ::= <digit> | <digit><digit> | <digit><digit><digit>

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
ルールの説明

IPv4アドレスは、ドットで区切られた4つの数値セグメントで構成されます:number.number.number.number、例:192.168.1.1。各セグメントは0から255の範囲内である必要があります。数値は先頭ゼロを含むことができます。アドレスの前後には任意の数の空白文字(スペース、タブ、改行など)を含むことができます。

フォーマットが適合しない場合、nullが返されます。

Input StringParse ResultComment
"192.168.1.1"Success標準的な有効なアドレス
"0.0.0.0"Success最小値の境界
"255.255.255.255"Success最大値の境界
"10.20.30.40"Success通常のアドレス
" 192.168.1.1 "Success前後に空白を含むことができる
"192.168.01.1"Success先頭ゼロが許可される (01 = 1)
"1.2.3"nullセグメントが3つのみ(4つ必要)
"1.2.3.4.5"nullセグメントが5つ(4つ必要)
"256.0.0.1"null最初のセグメントが255より大きい(256は範囲外)
"1.300.2.3"null2番目のセグメントが255より大きい
"1.2.3."null4番目のセグメントが欠落
".1.2.3"null最初のセグメントが欠落
"1..2.3"null2番目のセグメントが欠落
"a.b.c.d"null非数値文字
"1.2.+3.4"null符号+は無効

IPv6へのキャスト

FROM String

動作変更

バージョン4.0より前では、DorisはIPv6アドレスフォーマットに対してより緩い要件を持っていました。例:

  • 連続する複数のコロンを許可('1:1:::1'など)
  • 実際に何も省略しないダブルコロンを許可('1:1:1::1:1:1:1:1'など)

バージョン4.0以降、これら2つの非標準フォーマットは厳密モードではエラーになるか、非厳密モードではnullを返します。

厳密モード

BNF定義
<ipv6> ::= <whitespace>* <ipv6-standard> <whitespace>*
| <whitespace>* <ipv6-compressed> <whitespace>*
| <whitespace>* <ipv6-ipv4-mapped> <whitespace>*

<ipv6-standard> ::= <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16>

<h16> ::= <hexdigit>{1,4}

<hexdigit> ::= <digit> | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F"

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
ルールの説明
  1. 標準形式:16進数の8つのグループで構成され、各グループは1から4桁の16進数で、コロンで区切られます。例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. 圧縮形式:
  • ダブルコロン(::)を使用して、連続する1つ以上のゼロのグループを表すことができます。
  • ダブルコロン(::)は、アドレス全体で一度だけ使用できます。
  • :: だけでも有効なアドレスで、すべてゼロを表します。
  • 1:1:1::1:1:1:1:1 は、:: が連続するゼロを表していないため無効です。
  • 以下のアドレスはすべて有効で同一です:
    • 2001:0db8:0000:0000:0000:0000:1428:57ab
    • 2001:0db8:0000:0000:0000::1428:57ab
    • 2001:0db8:0:0:0:0:1428:57ab
    • 2001:0db8:0::0:1428:57ab
    • 2001:0db8::1428:57ab
  1. IPv4マップアドレス:
  • IPv6アドレスの最後の32ビット(最後の2つのグループ)でIPv4のドット区切り10進形式を使用できます。
  • この形式は通常、IPv4アドレスのIPv6へのマッピングを表すために使用されます。
  • 例:::ffff:192.168.89.9 は ::ffff:c0a8:5909 と同等です
  1. アドレスの前後には、任意の数の空白文字(スペース、タブ、改行など)を含めることができます。
  2. 16進数の文字は大文字(A-F)または小文字(a-f)のいずれでも使用できます。
  3. IPv4部分はIPv4のルールに従う必要があります:各セグメントは0から255の範囲内でなければなりません。
  4. アドレス形式が上記のルールに適合しない場合、エラーが報告されます。
Input StringParse ResultComment
2001:db8:85a3:0000:0000:8a2e:0370:7334Success標準の有効なアドレス
::Successすべてゼロのアドレス
2001:db8::Success圧縮形式を使用
::ffff:192.168.1.1SuccessIPv4マップアドレス
2001:db8::1Success前後に空白文字を含むことができます
2001:db8::1::2Errorダブルコロン(::)が2回出現
2001:db8:85a3:0000:0000:8a2e:0370:7334:1234Error8つを超えるグループ
2001:db8:85a3:0000:8a2e:0370Error6つのグループのみ(8つか圧縮形式を使用する必要があります)
2001:db8:85g3:0000:0000:8a2e:0370:7334Error無効な16進数文字「g」を含む
2001:db8::ffff:192.168.1.260ErrorIPv4部分が範囲外(260 > 255)
2001:db8::ffff:192.168..1ErrorIPv4部分の形式エラー(セグメントが欠落)
2001:0db8:85a3:::8a2e:0370:7334Error3つのコロンが連続
20001:db8::1Error最初のグループが16進数4桁を超過

非厳格モード

BNF定義
<ipv6> ::= <whitespace>* <ipv6-standard> <whitespace>*
| <whitespace>* <ipv6-compressed> <whitespace>*
| <whitespace>* <ipv6-ipv4-mapped> <whitespace>*

<ipv6-standard> ::= <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16> ":" <h16>

<h16> ::= <hexdigit>{1,4}

<hexdigit> ::= <digit> | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F"

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
ルール説明
  1. 標準フォーマット:16進数の8つのグループで、各グループは1から4桁の16進数で構成され、コロンで区切られます。例:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. 圧縮フォーマット:
  • 二重コロン(::)は、連続する1つ以上の0のグループを表すために使用できます。
  • 二重コロン(::)は、アドレス全体で1回のみ使用できます。
  • :: だけでも有効なアドレスで、すべて0を表します。
  • 1:1:1::1:1:1:1:1 は無効です。:: が連続する0を表していないためです。
  • 以下のアドレスはすべて有効で同一です:
    • 2001:0db8:0000:0000:0000:0000:1428:57ab
    • 2001:0db8:0000:0000:0000::1428:57ab
    • 2001:0db8:0:0:0:0:1428:57ab
    • 2001:0db8:0::0:1428:57ab
    • 2001:0db8::1428:57ab
  1. IPv4マップアドレス:
  • IPv6アドレスの下位32ビット(最後の2グループ)でIPv4ドット記法を使用できます。
  • このフォーマットは通常、IPv4アドレスをIPv6にマッピングする際に使用されます。
  • 例:::ffff:192.168.89.9 は ::ffff:c0a8:5909 と同等です
  1. アドレスの前後には、任意の数の空白文字(スペース、タブ、改行など)を含めることができます。
  2. 16進数の文字は大文字(A-F)または小文字(a-f)で記述できます。
  3. IPv4部分はIPv4ルールに従う必要があります:各セグメントは0から255の範囲内である必要があります。
  4. アドレスフォーマットが上記のルールに適合しない場合、null が返されます。
入力文字列解析結果コメント
2001:db8:85a3:0000:0000:8a2e:0370:7334成功標準的な有効アドレス
::成功すべて0のアドレス
2001:db8::成功圧縮フォーマットを使用
::ffff:192.168.1.1成功IPv4マップアドレス
2001:db8::1成功前後に空白文字を含むことができます
2001:db8::1::2null二重コロン(::)が2回出現
2001:db8:85a3:0000:0000:8a2e:0370:7334:1234null8グループを超過
2001:db8:85a3:0000:8a2e:0370null6グループのみ(8グループまたは圧縮フォーマットが必要)
2001:db8:85g3:0000:0000:8a2e:0370:7334null無効な16進数文字 'g' を含む
2001:db8::ffff:192.168.1.260nullIPv4部分が範囲外(260 > 255)
2001:db8::ffff:192.168..1nullIPv4部分のフォーマットエラー(セグメントが不足)
2001:0db8:85a3:::8a2e:0370:7334null3つのコロンが連続
20001:db8::1null最初のグループが16進数4桁を超過

IPv4から変換

任意のIPv4アドレスをIPv6に変換できます。変換は常に成功し、strictモードと非strictモード間で動作は一致します。

入力IPv4変換後IPv6
192.168.0.0::ffff:192.168.0.0
0.0.0.0::ffff:0.0.0.0