正确正则表达式为^((25[0-5]|20-4|[01]?0-9?).){3}(25[0-5]|20-4|[01]?0-9?)$,它严格限定每段0–255、禁止前导零、锚定首尾确保完全匹配,并排除999.999.999.999等非法值。

直接用正则表达式验证 IPv4 地址,核心是确保四段数字每段都在 0–255 范围内、用点分隔、且整个字符串完全匹配——不能多也不能少,也不能有前导零(除非单独是 0)。
单段数字必须严格落在 0–255
不能用 \d{1,3} 这种宽松写法,否则会放过 999 或 012 这类非法值。正确拆解方式是三类组合:
-
250–255:用
25[0-5]精确覆盖 -
200–249:用
2[0-4][0-9](百位是 2,十位 0–4,个位任意) -
0–199:用
[01]?[0-9][0-9]?,它允许0、5、42、199,但拒绝00、05、012(即禁止非零数字带前导零)
四段结构要完整且无歧义
必须用 ^ 和 $ 锚定首尾,避免部分匹配(比如 "192.168.1.1abc" 或 "x192.168.1.1" 被误判为合法)。段间分隔符只能是单个点,不能是双点或末尾点。
推荐写法是把单段模式复用四次,并用点号连接:
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$实际使用建议
在代码中别每次调用都临时编译正则,应预编译提升性能和可读性:
- Python 中用
re.compile(...)生成 Pattern 对象,再调用.match() - JavaScript 中可封装成函数,用
regex.test(ip)返回布尔值 - 注意测试边界值:
"0.0.0.0"、"255.255.255.255"、"192.168.0.1"应通过;"256.1.1.1"、"192.168.1"、"192.068.0.1"、"1.1.1.1."都应失败
不推荐的简化写法
像 ^(\d{1,3}\.){3}\d{1,3}$ 看似简洁,但会错误接受 "999.999.999.999" 或 "01.02.03.04"。IPv4 验证不是“看起来像”,而是“语法与数值双重合法”——正则必须同时承担范围控制和结构约束两重责任。











