###前提・実現したいこと
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])$/
でいけました。
お手数をおかけしますが、ご回答お願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/27 08:30
回答3件
0
ベストアンサー
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 という「ネットワークアドレスの範囲」を示していると取られます。(どちらを意味しているかは文脈で判断するしかない)
これに合致しているかどうかということになると、正規表現でやらない方がよいでしょう。
投稿2017/03/27 08:36
総合スコア13703
0
IPアドレスは一桁や二桁の数値の場合0で頭を埋めるケースもあるので
なにをもって正しいとするか定義されていないと意味がない質問です。
また直接0が入ることも想定したほうがよいです
たとえばこんな感じで抜き出した上で数値の整合性をチェックしたほうがよいかも
var str="10.1.2.3"; var reg=new RegExp("^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$"); console.log(str.match(reg).filter(function(i,j){return (j>0 && i>=0 && i<=255);}).length==4);
投稿2017/03/27 12:01
編集2017/03/27 12:10総合スコア117127
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/28 06:59 編集
2017/03/28 07:15
2017/03/28 07:32 編集
2017/03/28 08:21 編集
2017/03/28 08:31 編集
2017/03/28 08:32
2017/03/28 12:01 編集
2017/03/28 11:28
2017/03/28 11:43 編集
0
投稿2017/03/27 08:33
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。