ドメイン名のルール
ドメイン名には登録できる文字列についてのルールが定められており、これを活用して、フォームの誤入力などを見つけることができます。
ルールの具体例としては、
・使えるのは半角英数とハイフンのみ
・ラベル(.(ドット)で区切られた文字列)の先頭と末尾にハイフンは使えない
・「ラベル全体の長さは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]
これで、ドメインのフォーマットに一致する正規表現の完成です。