我的团队构建了允许MAC地址作为用户输入的软件。这些地址通常以多种格式从各种平台复制和粘贴。
维基百科文档MAC地址注释约定如下:
标准格式(IEEE 802)用于打印EUI-48地址的人性化格式是六组由两个十六进制数字组成的组,按传输顺序(例如
01-23-45-67-89-AB)由连字符(-)分隔。此表单也通常用于EUI-64 (例如01-23-45-67-89-AB-CD-EF)。其他约定包括六组由两个十六进制数字组成的用冒号(:)分隔(例如01:23:45:67:89:AB),三组由四个十六进制数字组成,用圆点(.)分隔。(例如0123.4567.89AB);再次按传输顺序排列。
虽然不是那么可读的,但常见的情况是看到MAC地址以原始形式输入:AAAABBBBCCCC。
考虑到维基百科和其他地方记录的常见符号,我们使用正则表达式。
^(?:[0-9A-Fa-f]{2}([-: ]?))(?:[0-9A-Fa-f]{2}\1){4}[0-9A-Fa-f]{2}$|^(?:[0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4}$若要匹配下列格式:
AAAABBBBCCCCAA:AA:BB:BB:CC:CCAA-AA-BB-BB-CC-CCAAAA.BBBB.CCCC最近有人向我介绍了带有格式化示例的MAC地址介绍一文,该文章介绍了以下格式的AAA.ABB.BBC.CCC,我们的regex不支持这种格式。
经过一些研究和googling搜索,我无法将这种格式归因于特定的供应商或源。在修改regex之前,我希望了解格式的来源。遗憾的是,上述文章来源不佳,是谷歌搜索MAC地址格式的第一批结果之一。
在我的研究中,我遇到了其他几种格式,我们的正则表达式不匹配。显然,有多种方法来表示一个48位的MAC地址.
表达48位MAC地址的各种标准和行业实践方法是什么?由于可能的话,可以在几个不同的地方用分隔符拆分12个字符串,所以我希望有一个给定格式的源代码。
发布于 2019-01-15 19:49:51
我确实没有关于48位MAC地址的各种表示的所有来源,但我看到它们被不同的使用:
AA-BB-CC-DD-EE-FF
AA.BB.CC.DD.EE.FF
AA:BB:CC:DD:EE:FF
AAA-BBB-CCC-DDD
AAA.BBB.CCC.DDD
AAA:BBB:CCC:DDD
AAAA-BBBB-CCCC
AAAA.BBBB.CCCC
AAAA:BBBB:CCCC
AAAAAA-BBBBBB
AAAAAA.BBBBBB
AAAAAA:BBBBBB如果为此构建正则表达式,我将考虑所有这些格式,并确保不允许混合大小和分隔符。奇怪的是,我没有看到一个字符被表示为没有分隔符的一组字符。
这一直是我的宠儿,特别是当我需要通过各种交换机、路由器、WAPs等网络跟踪MAC地址时,查看ARP和CAM表,以及每个设备在其表中都有不同的表示形式。
https://networkengineering.stackexchange.com/questions/56141
复制相似问题