WEBの極み

WEB時代を生き残る情報とテクニック

*

javascript 正規表現でIPv4の0~255.を表現する方法とその考え方。

   

IPv4では0~255.0~255.0~255.0~255
とういう表現になります。感覚としては
[0-255].[0-255].[0-255].[0-255]
と表現したくなりますが、当たり前ですがこれではダメです。

実はこれを正規表現で表現するのは少し頭を使います。
まずは0~255を桁に応じて分割します。

0~9      [0-9]
10~99 [1-9][0-9]
100~199 1[0-9][0-9]
200~249 2[0-4][0-9]
250~255 25[0-4]

これをさらに整理します。
0~99 [1-9]?[0-9] //?は直前の文字に 0 回か 1 回の出現にマッチするという意味
100~199 1[0-9]{2} //{2}は直前にある表現([0-9])に2回マッチするという意味
200~249 2[0-4][0-9]
250~255 25[0-4]

数字の正規表現では、分けて考えて整理するというのが基本になるようです。

これを正規表現としてまとめ、ドットをつけます。
(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)
になります。or演算の部分は | ですので注意が必要です。

さらにこれを3回繰り返し、最後にドットなしを一回付け足します。
(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

最後に前方一致と後方一致をつけます。これがないとa11.24.25.15や144.122.255.24aの様に英文字が混ざっていても通ってしまいます。
/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/

さらに短く表現する方法もあるみたいです。是非試してみてください。
IPv4にマッチする正規表現。

 - javascript