ドメインのフォーマットチェック(正規表現)

ドメイン名のルール

ドメイン名には登録できる文字列についてのルールが定められており、これを活用して、フォームの誤入力などを見つけることができます。

ルールの具体例としては、
・使えるのは半角英数とハイフンのみ
・ラベル(.(ドット)で区切られた文字列)の先頭と末尾にハイフンは使えない
・「ラベル全体の長さは3文字以上63文字以下
等の特徴が挙げられます。
また、現在ドメインは必ず2つ以上のラベルから成り立ち、最低でも1つの「.」が入ることになります。

これらの特徴を利用して、明らかな誤入力・いたずら入力、フォームの脆弱性を付いた不正なアクセスを防ぐことができるのです。

 

ドメインを正規表現で表す

上記の条件を正規表現で表してみましょう。
まず、先頭・末尾を指定します。先頭と末尾の文字は英数字のみなので下記のようになります。

[A-Za-z0-9][A-Za-z0-9]

そして、先頭と末尾以外の文字は英数字に加えてハイフンもを加えます。

[A-Za-z0-9][A-Za-z0-9\-][A-Za-z0-9]

ラベル全体の長さは3文字以上63文字以下というルールがあるため、 先頭と末尾以外の文字に「1以上61以下」と言う長さのルールを加えます。

[A-Za-z0-9][A-Za-z0-9\-]{1,61}[A-Za-z0-9]

TLD以外のラベルには、末尾に.(ドット)がつくので追加します。

[A-Za-z0-9][A-Za-z0-9\-]{1,61}[A-Za-z0-9]\.

これが最低でも1つ、その後ろにTLDが続きます。現在TLDに使われている文字はアルファベットのみなので、数字やハイフンにはマッチしないようにします。

([A-Za-z0-9][A-Za-z0-9\-]{1,61}[A-Za-z0-9]\.)+[A-Za-z]

これで、ドメインのフォーマットに一致する正規表現の完成です。