IP格式合法问题研究

今天面试xx公司,面试官要我写正则验证ip地址的合法性,我写的是:

((25[0-5]|2[0-4]\d|1?\d?\d).){3}(25[0-5]|2[0-4]\d|1?\d?\d)

即验证范围是 0.0.0.0-255.255.255.255

然后面试官问我写的这个当出现 010.020.023.01这种情况时我的正则也可以匹配出来,但是010.020.023.01并不是合法的ip,可是我认为ip地址这个是合法的,ip以点分十进制表示,这个ip应该等同于10.20.23.1

于是我用电脑进行测试,ping了一下192.162.010.023这个ip地址,可是显示的却是192.168.8.19这个ip
这里写图片描述
说明此处将010.023变成了八进制进行解析,即010->8,023->19!!!

由于八进制中,数字为0-7,所以当出现8、9时即错误
这里写图片描述

当转化成十进制数时,不超过0-255即为合法ip
这里写图片描述
(0378)8=(256)10,超过255所以请求不到
这里写图片描述

然后我又测了一下,当我将梳子换成16进制时
这里写图片描述

在linux操作系统和windows操作系统环境下均为上述显示

经过研究由于在c语言中0开头的数字按8进制处理;0x就会翻译成16进制,windows和linux内核都是c,所以会将其翻译成相应的进制

综上,我认为,我所写的正则表达式是对的,即在三位数字的情况下,0xx(x表示数字)格式的ip写法也应该是正确的

以上内容纯属个人见解,欢迎大家与我进行交流讨论,指出错误

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值