サブドメインなしで有効なドメイン名に一致する正規表現とは何ですか?


123

ドメイン名を検証する必要があります:

Google COM

stackoverflow.com

つまり、最も生の形式のドメイン-wwwのようなサブドメインでさえも。

  1. 文字はa〜zのみにする必要があります。AZ | 0-9およびピリオド(。)およびダッシュ(-)
  2. ドメイン名の部分はダッシュ(-)で開始または終了しないでください(例-google-.com)
  3. ドメイン名の部分は1〜63文字である必要があります
  4. 拡張子(TLD)は今のところ#1ルールの下であれば何でもかまいませんが、後でリストに対して検証することができますが、1文字以上にする必要があります

編集:TLDは現状では明らかに2〜6文字です

番号。4改訂: TLDは.co.ukのようなものを含むため、実際には「サブドメイン」とラベル付けする必要があります-(リストに対するチェックを除いて)可能な唯一の検証は「最初のドットの後に1つまたはルール#1の下でより多くの文字

どうもありがとうございました。


1
まったく役に立たないかもしれません。google.co.ukと一部の日本語ドメインに関しては、正規表現を使用する前によく考えなければならないことでしょう。私の個人的な考えは、正規表現はドメインを実際のドメインに検証するのに十分ではないということです。参考までに、TLD
SO

1
ホスト名検証に関する関連質問への私の回答を参照してください。
SAM

2
しばしば忘れられる:完全修飾ドメイン名の場合、TLDの後のピリオドと一致する必要があります。
schmijos 2013年

1
4年が経過しましたが、現在の数は最大89,000です
mydoglixu

1
これらの回答のいくつかはかなり良いですが、この他の質問には一見の価値がある別の良い回答もあります。
craftworkgames

回答:


49

まあ、それは 非常に簡単、あなたの特定の要件を考えると、(コメントを参照)、それは見た目より少しsneakier:

/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/

ただし、これにより多くの有効なドメインが拒否されることに注意してください。


これは機能しているようです。検証に合格しないドメインの種類を知っていますか?
2012

12
@infensus-あなたの仕様を考えるとこの正規表現は正しいですが、あなたの仕様は間違っています。g.coは有効なドメイン名ですが、g1文字のみです。
sch 2012

3
^([a-z0-9-))(([a-z0-9-] {1,61})?[a-z0-9] {1})?(\。 [a-z0-9](([a-z0-9-] {1,61})?[a-z0-9] {1})?)?(\。[a-zA-Z] {2 、4})+ $
トランシルブラッド2013年

1
x.comはここを通過しません
Neil McGuigan

4
@ニール:そうだね。元の質問では3〜63文字が必要でした(編集3を参照)。これは、1文字のドメインをサポートするようにかなり簡単に変更できます/^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.[a-zA-Z]{2,}$/。しかし、これはまだたくさんの有効なものを拒否します...
Cameron

84

これは少し古い投稿ですが、ここでのすべての正規表現には1つの非常に重要なコンポーネント、IDNドメイン名のサポートがありません。

IDNドメイン名はxn--で始まります。ドメイン名で拡張UTF-8文字を有効にします。たとえば、「♡.com」が有効なドメイン名であることをご存知ですか?うん、「ラブハートドットコム」!ドメイン名を検証するには、http://xn--c6h.com/に検証を通過させる必要があります。

この正規表現を使用するには、ドメインを小文字に変換し、IDNライブラリを使用してドメイン名をACE(「ASCII互換エンコーディング」とも呼ばれる)にエンコードする必要があります。良いライブラリの1つはGNU-Libidnです。

idn(1)は、国際化ドメイン名ライブラリへのコマンドラインインターフェイスです。次の例では、UTF-8のホスト名をACEエンコーディングに変換します。結果のURL https://nic.xn--flw351e/は、ACEでエンコードされたhttps://nic.xのと同等のものとして使用できます

  $ idn --quiet -a nic.谷歌
  nic.xn--flw351e

この魔法の正規表現はほとんどのドメインをカバーするはずです(ただし、私が見逃した有効なエッジケースがたくさんあると確信しています)。

^((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\.(xn--)?([a-z0-9\-]{1,61}|[a-z0-9-]{1,30}\.[a-z]{2,})$

ドメイン検証の正規表現を選択する場合、ドメインが以下と一致するかどうかを確認する必要があります。

  1. xn--stackoverflow.com
  2. stackoverflow.xn--com
  3. stackoverflow.co.uk

これら3つのドメインが通過しない場合、正規表現が正当なドメインを許可していない可能性があります。

OracleのInternational Language Environment GuideのInternationalized Domain Names Supportページを確認してくださいをご覧ください。

ここで正規表現を試してみてくださいhttp : //www.regexr.com/3abjr

ICANN IDNドメインのいくつかの例を確認するために使用できる委任されたTLDのリストを保持しています。


編集:

 ^(((?!-))(xn--|_{1,1})?[a-z0-9-]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9][a-z0-9\-]{0,60}|[a-z0-9-]{1,30}\.[a-z]{2,})$

この正規表現は、ホスト名の末尾に「-」が有効であるとマークされているドメインを停止します。さらに、無制限のサブドメインを許可します。


1
これは最大1つのサブドメインしかサポートしないことに注意してください。それ以上の場合はfalseになります。これは、内部サイトなどで使用しない限り、実行するのに名誉を与えるものではありません。より多くのサブドメインをサポートできるようにするための簡単な試み:/^((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,}\.?((xn--)?([a-z0-9\-.]{1,61}|[a-z0-9-]{1,30})\.?[a-z]{2,})$/i
stakolee

1
しかし、孤独なtldは機能していません:(たとえばto.to。)はコンテンツを含む有効なURLです
iiic

@iiic、はい、ただしto.完全修飾ドメイン名ではありません。トップレベルのドメインを許可する場合は、のようなものを使用する必要^(((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\.)?(x--)?([a-z0-9\-]{1,61}|[a-z0-9-]{1,30}\.[a-z]{2,})\.?$がありますが、警告されます。testまたはのようなドメインを入力しているユーザーnaも許可します。
Tim Groeneveld

は無効ですがinvali.d、有効なドメイン名として受け入れinvali.d.co.ukます。
Pawel Krakowiak 2017

1
xn--stackoverflow.com「stackoverflow」はPunycodeから変換できないため、は有効な名前ではないことに注意してください。ただし、これは正規表現でできることを超えています。一般的なxn--[a-z0-9]+注意として、ラベルはIDNのみですが、xn--[a-z0-9]+\-[a-z0-9]+ASCII文字と非ASCII文字の混在を示します
Marcus

50

私のRegExは次です:

^[a-zA-Z0-9][a-zA-Z0-9-_]{0,61}[a-zA-Z0-9]{0,1}\.([a-zA-Z]{1,6}|[a-zA-Z0-9-]{1,30}\.[a-zA-Z]{2,3})$

i.oh1.mewow.british-library.uk問題ありません

UPD

ここに更新されたルールがあります

^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})$

正規表現の可視化

https://www.debuggex.com/r/y4Xe_hDVO11bv1DV

今ではかどうかを確認-または_ドメインラベルの開始または終了に。


9
見た目はかなり良いですが{2,6}、新しいTLD の基準を更新する必要があります。たぶん{2,}
jwatts1980 2014年

@ jwatts1980そのようなゾーンの例はありますか?またはあなたは可能な将来のゾーンを意味しますか?
paka

1
例と関連リソースへのリンクを含む今後の変更について説明する記事は次のとおりです。zdnet.com
jwatts1980

1
なぜ([a-zA-Z] {1} [a-zA-Z] {1})ではなく([a-zA-Z] {2})ではないのですか?
アントン14

3
2つの選択肢がある最後の部分も間違っています。IDNAサブラベルを受け入れるccTLD(2文字)が存在します。また、すでにIDNAラベルを使用しているTLDラベルも存在します。他のものと変わらない最後のラベルを特別なケースにしないでください(サブドメインの他のすべてのラベルと同様に、可変長で追加された多くの拡張子が追加されています。IDNAラベルもPunycodedと表示される場合があります(この場合、「- - 」ラベル内のセグメントのみの場合は『 - 』のラベルでは許可されます。..最後にアンダースコアがすべてのラベルでどこでも無効です。
verdy_p

24

私の賭け:

^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$

説明:

ドメイン名はセグメントから構築されます。以下は1つのセグメントです(最終を除く)。

[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?

1〜63文字で、「-」で開始または終了しないでください。

ここで「。」を追加します それに少なくとも1回繰り返します:

(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+

次に、2〜63文字の最終セグメントを添付します。

[a-z0-9][a-z0-9-]{0,61}[a-z0-9]

ここでテストしてください: http : //regexr.com/3au3g


@GaneshBabu完全一致とはどういう意味ですか?
Yaroslav Stavnichiy 2016

1
他のすべての回答はうまくいきませんでしたが、これはうまくいきました。
Danny Coulombe、2018年

最後にセミコロンとカンマを避けたいという同様の要件がありましたが、何度も試しましたが、以下の成功例では、const regexDomain = / ^(?:[A-Za-z0-9](?: [A-Za-z0-9-] {0,61} [A-Za-z0-9])?\。)+ [A-Za-z0-9] [A-Za-z0-9-] { 0,61} [A-Za-z0-9] / g; まあそれは私が使用するかどうかを検証し、そして; 間にはありますが、最後にvliadateに失敗します。
ハリー

有効であるはずのドメインが見つかりましたが、正規表現では無効です。たとえば、редбулл.москваは有効なドメイン、またはредбулл.рфと红色的公牛。中国
pubkey

1
@pubkey、これらのドメイン名をpunycodeに変換する必要があります。редбулл.москваの実際の名前はxn--90afc0aazy.xn--80adxhksで、正規表現はそれに一致します。
Yaroslav Stavnichiy

13

ほんの小さな修正-最後の部分は6までにする必要があります。したがって、

^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}$

最長のTLDはmuseum(6文字)-http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains


3
注:これは、有効な(まだまれです)ドメイン名www.my---domain.comを渡しません
Chris Bier

17
新しいTLDでそれをカットしません。例.photography
Sam Figueroa

2
@SamFigueroa長さを変更する必要があるだけです
Steel Brain

3
サブドメインと違いはないTLDのチェックがあってはなりません。そして、現在のavailabletldsに基づいて正規表現を使用することは、将来の証明にはなりません。
ロイック・フォーレ-ラクロワ

1
最後のビット{2,63}提案する
Eric Dobbs

13

受け入れられた答えが私にとってうまくいかない、これを試してください:

^((?!-)[A-Za-z0-9-] {1,63}(?<!-)\。)+ [A-Za-z] {2,6} $

検証については、このユニットテストケースにアクセスしてください。


4
.audio、.photography、およびこれらのほとんどのような新しいより長いTLD名のサポートなし... data.iana.org/TLD/tlds-alpha-by-domain.txt
mrbinky3000

@ mrbinky3000最後{2,6}を別のものに変更するだけで動作します。鉱山:^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+(?!-)[a-zA-Z0-9-]{1,63}(?<!-)$
Mygod 2017年

@Mygodあなたの正規表現には、最後の疑問符の後ろに幅のないゴミが含まれているので、それをコピーする人は不愉快に驚かれます
MightyPork

1
@MightyPorkそうですね!:申し訳ありませんが、ここで(たぶん)クリーンバージョンです^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+(?!-)[a-zA-Z0-9-]{1,63}(?<!-)$
Mygod

非常に素晴らしい。残念ながら、後読み式はJavaScriptでは無効です。:/
PhiLho 2018

13

この回答は、ドメイン名(サービスRRを含む)に対するものであり、ホスト名(電子メールのホスト名など)に対するものではありません。

^(?=.{1,253}\.?$)(?:(?!-|[^.]+_)[A-Za-z0-9-_]{1,63}(?<!-)(?:\.|$)){2,}$

基本的にはmkyongの答えであり、さらに:

  • 長さプレフィックスとヌルルートを含む最大長255オクテット。
  • 末尾の「。」を許可する 明示的なDNSルートの場合。
  • サービスドメインRRの先頭に '_'を許可します(バグ:_ラベルに最大15文字を強制しません。また、サービスRRより上のドメインを少なくとも1つ必要としません)。
  • 可能なすべてのTLDに一致します。
  • サブドメインラベルをキャプチャしません。

パーツ別

先読み。オプションの後続リテラル「。」を使用して、^ $から253文字までの最大長を制限

(?=.{1,253}\.?$)

先読み、次の文字は「-」ではなく、次の「。」の前の文字の後に「_」は続きません。つまり、ラベルの最初の文字が「-」ではなく、最初の文字のみが「_」であることを強制します。

(?!-|[^.]+_)

ラベルごとに1〜63文字の許可された文字。

[A-Za-z0-9-_]{1,63}

後読み、前の文字は「-」ではありません。つまり、ラベルの最後の文字が「-」ではないことを強制します。

(?<!-)

「。」を強制する ラベルを除くすべてのラベルの最後。オプションです。

(?:\.|$)

上記のほとんどの場合、これには少なくとも2つのドメインレベルが必要ですが、これは正確ではありませんが、通常は妥当な仮定です。TLDまたは非修飾の相対サブドメインを許可する場合は、{2、}から+に変更します(例:localhost、myrouter、to)。

(?:(?!-|[^.]+_)[A-Za-z0-9-_]{1,63}(?<!-)(?:\.|$)){2,}

この式の単体テスト


1
ありがとう!これがここでの最高の正規表現です。徹底した説明と単体テストはおまけです。
naudster 2017年

「RR」とはどういう意味ですか?
ウィーラー、

リソースレコード。通常、サービスとの対話方法を説明するテキストまたは情報フィールド。
Andrew Domaszek 2017

この正規表現は正しくありません。たとえば、ドメインredbull。移动は有効ですが、正規表現は一致しません。
pubkey

最初にpunycodeに変換してから、一致させます。pre-punycodeバージョンの長さ制限は、実装するのが本当に難しいです。
Andrew Domaszek

8

他の回答でドメイン名検証ソリューションに正しい方向を示していただきありがとうございます。ドメイン名はさまざまな方法で検証できます。

IDNドメインを人間が読める形式で検証する必要がある場合は、regex \p{L}が役立ちます。これにより、任意の言語の任意の文字を照合できます。

最後の部分にハイフンが含まれている可能性があることに注意してください!punycodeでエンコードされた中国の名前には、tldにUnicode文字が含まれている場合があります。

私は例えば一致するソリューションに来ました:

  • Google COM
  • masełkowski.pl
  • maselkowski.pl
  • m.maselkowski.pl
  • www.masełkowski.pl.com
  • xn--masekowski-d0b.pl
  • 中国互联网络信息中心。中国
  • xn--fiqa61au8b7zsevnm8ak20mc4a87e.xn--fiqs8s

正規表現は:

^[0-9\p{L}][0-9\p{L}-\.]{1,61}[0-9\p{L}]\.[0-9\p{L}][\p{L}-]*[0-9\p{L}]+$

ここで確認して調整してください

注:現在のドメイン名では文字セットが許可されているため、この正規表現は非常に寛容です。

更新:単純化されたものa-aA-Z\p{L}と同じように、さらに単純化されました\p{L}

注2:唯一の問題は、二重ドットが含まれるドメインと一致することですmasełk..owski.pl。誰かがこれを修正する方法を知っている場合は、改善してください。


の代わりに[:alpha:]and [:digit]を使用できます\p{L}。正常に動作します。
puchu

この方法でIDNを検証するには、まずそれをpunycodeに変換する必要があります。たとえば、exprの場合、中国互联网络信息中心中国互联网络信息中心中国互联网络信.中国チェックは有効ですが、IDN変換後、ラベルあたりのバイト数が多すぎます。\ p {L}はpunycodeバイト(シンボルごとに異なる)ではなくシンボルに一致するため、変換後のサイズを制限しようとする場合、繰り返しカウントは役に立ちません。
Andrew Domaszek 2018年

良い点は、各部分が64バイトに制限されていることです。ただし、RegExpでは確認できないため、例のホスト名では失敗するpunycodeデコーダーを使用して、さらに検証手順を実行する必要があります。中国人はこの制限に腹を立てているに違いない。
PeterM 2018年

7
^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,7}$

[ドメイン-小文字と0〜9のみ] [ハイフンを含めることができます] + [TLD-小文字のみ、2〜7文字にする必要があります]
http://rubular.com/は、正規表現のテストに優れています。
編集:Dan Caddiganが指摘したように、「。rentals」のTLDの最大値を7文字に更新しました。


1
TLDを制限する理由 今.photographyは無効になります。無制限の文字またはそのようなものにしてください。
アドリアン、

5

コメントするにはまだ十分な担当者がいません。パカの解決策に応えて、私は3つの項目を調整する必要があることがわかりました。

  • ダッシュが範囲として解釈されるため、ダッシュとアンダースコアが移動されました(「0-9」のように)
  • 多くのサブドメインを持つドメイン名の完全なストップを追加しました
  • TLDの潜在的な長さを13に拡張

前:

^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})$

後:

^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][-_\.a-zA-Z0-9]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,13}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})$

3

新しいgTLDの場合

/^((?!-)[\p{L}\p{N}-]+(?<!-)\.)+[\p{L}\p{N}]{2,}$/iu

2
他の回答よりも優れていると思われる回答について詳しく教えてください。さらに一致するものはありますか?情報を追加するには、投稿を直接編集してください。
Sven R.

私が書いたように:新しいgTLD。Unicode文字とUnicode TLDを含むドメイン。
Ben Keil

1
@BenKeil:この部分について:(?<!-)
jor

@jorはネガティブな後ろ向きです。このチェックアウトshortcutfoo.com/app/dojos/regex/cheatsheet
ムハンマドFaizan

3

すでに指摘したように、サブドメイン(たとえば.co.ukドメイン)を実際的な意味で伝えることは明白ではありません。この正規表現を使用して、野生で発生するドメインを検証します。私が知っているすべての実用的な使用例をカバーしています。新しいものを歓迎します。私たちのガイドラインによるとそれは非捕獲グループと貪欲なマッチングを避けます。

^(?!.*?_.*?)(?!(?:[\d\w]+?\.)?\-[\w\d\.\-]*?)(?![\w\d]+?\-\.(?:[\d\w\.\-]+?))(?=[\w\d])(?=[\w\d\.\-]*?\.+[\w\d\.\-]*?)(?![\w\d\.\-]{254})(?!(?:\.?[\w\d\-\.]*?[\w\d\-]{64,}\.)+?)[\w\d\.\-]+?(?<![\w\d\-\.]*?\.[\d]+?)(?<=[\w\d\-]{2,})(?<![\w\d\-]{25})$

証明、説明、例:https ://regex101.com/r/FLA9Bv/9注:正規表現はECMA2018でのみサポートされている後読みを使用するため、現在はChromeでのみ機能します

ドメインを検証するときに選択する方法は2つあります。

本ごとのFQDNマッチング(理論的な定義、実際にはめったに発生しない):

実用的で保守的なFQDNマッチング(実用的な定義、期待され、実際にサポートされています):

  • 以下の例外/追加と一致する書籍別
  • 有効な文字: [a-zA-Z0-9.-]
  • ラベルはハイフンで開始または終了できません(RFC-952およびRFC-1123 / 2.1に従って)
  • TLDの最小長は2文字、最大長は現在存在するレコードごとに24文字です。
  • 末尾のドットと一致しない


2

ここに例を含む完全なコードがあります:

<?php
function is_domain($url)
{
    $parse = parse_url($url);
    if (isset($parse['host'])) {
        $domain = $parse['host'];
    } else {
        $domain = $url;
    }

    return preg_match('/^(?!\-)(?:[a-zA-Z\d\-]{0,62}[a-zA-Z\d]\.){1,126}(?!\d+)[a-zA-Z\d]{1,63}$/', $domain);
}

echo is_domain('example.com'); //true
echo is_domain('https://example.com'); //true
echo is_domain('https://.example.com'); //false
echo is_domain('https://localhost'); //false

2
^((localhost)|((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,253})$

私の回答の根拠を@mkyongに感謝します。より長い許容ラベルをサポートするように変更しました。

また、「localhost」は技術的には有効なドメイン名です。国際化ドメイン名に対応するために、この回答を変更します。


0
/^((([a-zA-Z]{1,2})|([0-9]{1,2})|([a-zA-Z0-9]{1,2})|([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]))\.)+[a-zA-Z]{2,6}$/
  • ([a-zA-Z]{1,2}) -> 2文字のみを受け入れます。

  • ([0-9]{1,2})-> 2つの番号のみを受け入れる場合

2つを超えるものがあれば、([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9])この正規表現が処理します。

少なくとも一度はマッチングを行いたい場合は+使用します。


0

^ [a-zA-Z0-9] [-a-zA-Z0-9] + [a-zA-Z0-9]。[az] {2,3}(。[az] {2,3}) ?(。[az] {2,3})?$

機能する例:

stack.com
sta-ck.com
sta---ck.com
9sta--ck.com
sta--ck9.com
stack99.com
99stack.com
sta99ck.com

拡張機能でも機能します

.com.uk
.co.in
.uk.edu.in

機能しない例:

-stack.com

最長のドメイン拡張でも機能します ".versicherung"



0

次の正規表現は、特定のドメインのサブ、ルート、TLDを抽出します。

^(?<domain>(?<domain_sub>(?:[^\/\"\]:\.\s\|\-][^\/\"\]:\.\s\|]*?\.)*?)(?<domain_root>[^\/\"\]:\s\.\|\n]+\.(?<domain_tld>(?:xn--)?[\w-]{2,7}(?:\.[a-zA-Z-]{2,3})*)))$

次のドメインでテスト済み:

* stack.com
* sta-ck.com
* sta---ck.com
* 9sta--ck.com
* sta--ck9.com
* stack99.com
* 99stack.com
* sta99ck.com
* google.com.uk
* google.co.in

* google.com
* masełkowski.pl
* maselkowski.pl
* m.maselkowski.pl
* www.masełkowski.pl.com
* xn--masekowski-d0b.pl
* xn--fiqa61au8b7zsevnm8ak20mc4a87e.xn--fiqs8s

* xn--stackoverflow.com
* stackoverflow.xn--com
* stackoverflow.co.uk

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.