MAC地址正则匹配及详细思路

关于MAC地址

MAC地址,也就是网卡MAC码。网卡MAC码是由IEEE的注册管理机构固定分配的,因此每一个主机会有一个MAC地址,具有全球唯一性。

需求分析

因为业务需要验证MAC地址是否合法,因而想到用正则进行匹配。

看过了大神chenyufeng1991的相关博客,有了一些大体思路。

原正则表达式为:

  • ([A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2}

因为考虑到MAC地址一般有两种格式,使用-连接或是:连接,于是我稍作改动,改动结果如下

  • /((([a-f0-9]{2}:){5})|(([a-f0-9]{2}-){5}))[a-f0-9]{2}/gi

以上正则表达式就是最终版的MAC地址验证表达式,如果不清楚具体原理可以接着往下看。

拆解分析

1. [a-f0-9]

匹配a到f或0到9中的任意一位字符。

匹配的结果例如2d

2. [a-f0-9]{2}

匹配连续两位的括号中任意字符。

匹配的结果例如d2ac

3. [a-f0-9]{2}:

连续两位的括号中任意字符再拼接一个:(冒号)。

匹配的结果例如b2:23:

4. ([a-f0-9]{2}:)|([a-f0-9]{2}-)

在第三步的基础上可以将冒号替换为横杠。

匹配的结果例如f3:79-

5. (([a-f0-9]{2}:)|([a-f0-9]{2}-)){5}

将第四步的结果重复5次。

匹配的结果例如00-01-6C-06-A6-00:01:6C:06:A6:

6. (([a-f0-9]{2}:)|([a-f0-9]{2}-)){5}[a-f0-9]{2}

在第五步的结果上再拼接两个[A-F0-9]范围内的两个字符

匹配的结果例如00-01-6C-06-A6-2900:01:6C:06:A6:29

7. 设置大小写不敏感与全局匹配

在正则最后加上/ig

完整的正则表达式也就是:

/(([a-f0-9]{2}:)|([a-f0-9]{2}-)){5}[a-f0-9]{2}/gi
8.解决AA:BB-CC:DD:EE-FF这类符号混用也能通过验证的问题

根据评论区smsra大佬的提醒,第7步的正则无法剔除AA:BB-CC:DD:EE-FF这类·-·与‘:’混用的脏数据,因此稍作改动,将重复匹配5次这一操作分别作用于
([a-f0-9]{2}:)([a-f0-9]{2}-)。最终正则如下:

/((([a-f0-9]{2}:){5})|(([a-f0-9]{2}-){5}))[a-f0-9]{2}/gi

END

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值