用于验证 64 位(8 字节)MAC 地址的正则表达式?



我已经回答了验证 mac 地址的问题,但它们是 48 位 mac 地址独有的。 我正在寻找可以验证 8 字节或 64 位 mac 地址的正则表达式。一个 64 位 mac 地址看起来像这样:(基本上比 48 位多 4 个十六进制数字)

00:13:a2:00:41:8b:93:7a
0013a200418b937a
AD:12:13:FC:14:EE:FF:FF
ad-12-13-fc-14-ee-ff-ad 

根据验证 48 位 mac 地址的答案,我想出了这个,但我正在寻找更简单的东西。

^((([0-9A-Fa-f]{2}:){7})|(([0-9A-Fa-f]{2}-){7})|([0-9A-Fa-f]{14}))([0-9A-Fa-f]{2})$

您可以使用([-:]?)捕获分隔符,该分隔符允许用冒号,短划线或其他任何内容分隔数字。然后,对于连续匹配项,请使用1反向引用来确保分隔符一致。这将减少重复性。

^[0-9A-Fa-f]{2}([:-]?)(?:[0-9A-Fa-f]{2}1){6}[0-9A-Fa-f]{2}$

试试这个:

^((?:[0-9A-Fa-f]{2}(?:[:-]?)){7}(?:[0-9A-Fa-f]{2}))$

正则表达式演示

这已经排除了 3 个选项,其中:-null作为 2 个十六进制数字之间的组分隔符。

它还删除了不必要的括号和不必要的捕获组。

或者,您可以关闭区分大小写并使用负前瞻:

^(?!.*[_G-Z])ww([:-]?)(?:ww1){6}ww$

查看在线 Java 演示

  • ^- 开始字符串锚点。
  • (?!.*[_G-Z])- 负前瞻以防止下划线或任何字符 G-Z。
  • ww- 匹配两个单词字符(w等于[0-9A-Za-z_])。
  • ([:-]?)- 捕获可选的冒号或连字符。
  • (?:- 打开非捕获组:
    • ww1- 两个单词字符和一个对我们的捕获组的反向引用。
    • ){6}- 关闭非捕获组并匹配 6 次。
  • ww- 匹配两个单词字符。
  • $- 结束字符串锚点。

最新更新