求助:如何用JavaScript正则表达式验证IPv4地址的0-255范围
搞定IPv4地址的正则验证:新手友好指南
嘿,作为正则新手,卡在IPv4的范围匹配完全正常——这部分确实有点绕,我来给你拆解得明明白白!
首先,咱们先明确IPv4每个八位组的核心规则:
- 必须是0到255之间的整数
- 不能有前导零(除非这个八位组就是
0本身,比如0.0.0.0合法,但01.2.3.4就不合法)
拆解单个八位组的正则匹配
单个合法的八位组可以分成5种情况,我们用|把它们组合起来:
25[0-5]:匹配250-255(比如250、255)2[0-4]\d:匹配200-249(比如200、249)1\d{2}:匹配100-199(比如100、199)[1-9]\d:匹配10-99(避免前导零,比如10、99,排除01、02这种)\d:匹配0-9(单个数字,比如0、9)
把这些组合起来,单个八位组的匹配规则就是:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)
这里用(?:...)是非捕获组,只是用来分组,不会保存匹配结果,能提高正则的效率。
完整的IPv4正则表达式
IPv4是4个这样的八位组用英文句点分隔,所以我们把单个八位组的规则重复4次,中间用转义后的句点\.分隔(因为.在正则里是“任意字符”,必须转义),再加上^和$确保整个字符串完全匹配(避免出现“1.2.3.4.5”或者“a1.2.3.4”这种部分匹配的错误):
^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$
给新手的额外提示
- 测试验证:你可以拿这些例子测试:
- 合法地址:
1.2.3.4、123.45.67.89、0.0.0.0、255.255.255.255 - 非法地址:
256.0.0.1(超过255)、01.2.3.4(前导零)、1.2.3(不足4个八位组)、1.2.3.4.5(超过4个八位组)
- 合法地址:
- 代码里的用法:比如在Python中,你可以用
re.fullmatch()方法来验证,它会自动检查整个字符串是否匹配,和正则里的^$效果一致:import re def is_valid_ipv4(ip): pattern = r'^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$' return re.fullmatch(pattern, ip) is not None
内容的提问来源于stack exchange,提问作者Mohammed Suleiman
相关产品推荐
相关产品推荐

