求可匹配部分MAC地址的正则表达式(含匹配/排除规则)
匹配部分MAC地址的正则表达式方案
没问题,我帮你定制了一个完全符合需求的正则表达式,先直接上代码:
^([0-9A-Fa-f]{2}[:-])*([0-9A-Fa-f]{1,2})?$
规则拆解
我来逐部分解释这个正则的逻辑,方便你理解和调整:
^和$:锚定字符串的开头和结尾,确保我们匹配的是整个字符串,不会漏掉前后的非法字符([0-9A-Fa-f]{2}[:-])*:匹配0次或多次「两位十六进制字符 + 分隔符(:或-)」的组合,对应MAC地址中已经完成的分组(比如93:、3E-这类)([0-9A-Fa-f]{1,2})?:匹配0次或1次「1-2位十六进制字符」,对应MAC地址最后一个可能不完整的分组;如果字符串以分隔符结尾(比如你的例子84:0C:),这部分可以为空,照样能匹配
验证你的测试用例
匹配成功的场景:
93:31:13:E1:D3:1A:5次完整分组(带分隔符)+ 最后两位十六进制,完全符合规则3E-EB-47-8:3次完整分组(带分隔符)+ 最后1位十六进制,符合规则84:0C::2次完整分组(带分隔符),结尾无额外字符,符合规则
匹配失败的场景:
6B-90-8Y-31-D1-7K:包含Y、K这类非十六进制字符,正则无法匹配37-4H-31:包含H这个非十六进制字符,正则无法匹配
可选调整:禁止空字符串
如果需要确保不匹配空字符串(比如用户输入完全为空的情况),可以用下面的版本:
^([0-9A-Fa-f]{2}[:-])+([0-9A-Fa-f]{0,2})?$|^[0-9A-Fa-f]{1,2}$
这个版本要求至少有一个有效字符,要么是一个/两个十六进制字符,要么是至少一个完整分组(带分隔符)。
内容的提问来源于stack exchange,提问作者Nope Nope
相关产品推荐
相关产品推荐

