質問: ### 前提・実現したいこと Javascriptにてシステムを作成しています。 IPアドレス入力のバリデーションにおいて、 正規化表現を利用しようと思っています。 X.X.X.Xだけの正規表現は検索して解決しましたが、 X.X.X.X/Yのようなサブネットを含む表現は解決できていません。 どのように表記すればよろしいでしょうか? X.X.X.X~Z.Z.Z.Zという範囲を求めるのではなく、 X.X.X.X/Yという入力表記が正しいかどうかを判断したいです。 ### 試したこと X.X.X.Xなら /^(([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 アドレスの表記で aaa.bbb.ccc.ddd/zz の /zz の部分は「ネットワークアドレスのビット長」を指しているので、zz が 0~32 の間の数値であれば問題がありません。 例えば 192.168.0.2/24 という表記は全くもって正しいです(これだとサブネットマスクが 255.255.255.0 であるネットワークであることを明示しているだけ)。 ですから、上の条件に合致するだけであれば、今の IP アドレスの正規表現に加えて、末尾に (/([0-9]|[1-2][0-9]|3[0-2])){0,1} を加えるだけでよいはずです。 ※/ で始まり、0~32 の数値が続く文字列が、0ないし1回出現する 192.168.0.0/24 という表記は CIDR といって、厳密には違います。こちらだと 192.168.0.0 ~ 192.168.0.255 という「ネットワークアドレスの範囲」を示していると取られます。(どちらを意味しているかは文脈で判断するしかない) これに合致しているかどうかということになると、正規表現でやらない方がよいでしょう。