什么是MAC地址的正则expression式?

以这种格式:

3D:F2:C9:A6:B3:4F 

要么:

 3D-F2-C9-A6-B3-4F 

以人性化的forms打印MAC-48地址的标准(IEEE 802)格式是六个组,由两个hex数字组成,用连字符或冒号分隔。

所以:

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

眼睛有点难受,但是这个:

 /^(?:[[:xdigit:]]{2}([-:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/ 

将为您的MAC表示法强制执行所有冒号或全部破折号。

(比较简单的正则expression式方法可能允许A1:B2-C3:D4-E5:F6 ,例如上面的拒绝。)

分隔符:“ ”,“ ”,“

双或单:00 = 0,0f = f

 /^([0-9a-f]{1,2}[\.:-]){5}([0-9a-f]{1,2})$/i 

要么

 /^([0-9a-F]{1,2}[\.:-]){5}([0-9a-F]{1,2})$/ 

 exm: 00:27:0e:2a:b9:aa, 00-27-0E-2A-B9-AA, 0.27.e.2a.b9.aa ... 

这个正则expression式匹配几乎所有的mac格式,包括Cisco格式,如0102-0304-abcd

 ^([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:]]{2}$ 

它匹配的示例string:

 01:02:03:04:ab:cd 01-02-03-04-ab-cd 01.02.03.04.ab.cd 0102-0304-abcd 01020304abcd 

混合格式也将匹配!

这个链接可能会帮助你。 你可以使用: (([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})

请注意,Unicode属性\p{xdigit}包含FULLWIDTH版本。 您可能更喜欢\p{ASCII_Hex_Digit}

问题的答案可能是最好的答案 – 只要你有一个安装了一定的古老的CPAN模块 – input:

 % perl -MRegexp::Common -lE 'say $RE{net}{MAC}' 

我把它输出的特殊模式显示为幸运模式13; 还有很多其他的。

这个程序:

 #!/usr/bin/env perl use 5.010; use strict; use warnings qw<FATAL all>; my $mac_rx = qr{ ^ (?&MAC_addr) $ (?(DEFINE) (?<MAC_addr> (?&pair) (?<it> (?&either) ) (?: (?&pair) \k<it> ) {4} (?&pair) ) (?<pair> [0-9a-f] {2} ) (?<either> [:\-] ) ) }xi; while (<DATA>) { chomp; printf("%-25s %s\n", $_ => /$mac_rx/ ? "ok" : "not ok"); } __END__ 3D:F2:C9:A6:B3:4F 3D:F2:AC9:A6:B3:4F 3D:F2:C9:A6:B3:4F:00 :F2:C9:A6:B3:4F F2:C9:A6:B3:4F 3d:f2:c9:a6:b3:4f 3D-F2-C9-A6-B3-4F 3D-F2:C9-A6:B3-4F 

生成这个输出:

 3D:F2:C9:A6:B3:4F ok 3D:F2:AC9:A6:B3:4F not ok 3D:F2:C9:A6:B3:4F:00 not ok :F2:C9:A6:B3:4F not ok F2:C9:A6:B3:4F not ok 3d:f2:c9:a6:b3:4f ok 3D-F2-C9-A6-B3-4F ok 3D-F2:C9-A6:B3-4F not ok 

这似乎是你要找的东西。

也看到这个问题 。

正则expression式如下:

 ^[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$ ^[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}$ 
 /(?:[A-Fa-f0-9]{2}[:-]){5}(?:[A-Fa-f0-9]{2})/ 

PHP的人:

 print_r(preg_match('/^(?:[0-9A-F]{2}[:]?){5}(?:[0-9A-F]{2}?)$/i', '00:25:90:8C:B8:59')); 

需要说明: http : //regex101.com/r/wB0eT7

python版本可能是:

 re.compile(r'\A(?:[\da-f]{2}[:-]){5}[\da-f]{2}\Z',re.I) 

您可以通过传递mac地址进行validation来使用以下过程,

 private static final String MAC_PATTERN = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"; private boolean validateMAC(final String mac){ Pattern pattern = Pattern.compile(MAC_PATTERN); Matcher matcher = pattern.matcher(mac); return matcher.matches(); } 
 /^(([a-fA-F0-9]{2}-){5}[a-fA-F0-9]{2}|([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}|([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})?$/ 

上面的正则expression式validation了以下所有的mac地址types:

 01-23-45-67-89-ab 01:23:45:67:89:ab 0123.4567.89ab 

如果你需要数字之间的空格,就像这个变体一样

 3D : F2 : C9 : A6 : B3 : 4F 

正则expression式更改

 "^([0-9A-Fa-f]{2}\\s[:-]\\s){5}([0-9A-Fa-f]{2})$" 

匹配48位EUI-48和64位EUI-64 MAC地址:

 /\A\h{2}([:\-]?\h{2}){5}\z|\A\h{2}([:\-]?\h{2}){7}\z/ 

其中\ h是[0-9a-fA-F]中的一个字符

要么:

 /\A[0-9a-fA-F]{2}([:\-]?[0-9a-fA-F]{2}){5}\z|\A[0-9a-fA-F]{2}([:\-]?[0-9a-fA-F]{2}){7}\z/ 

这允许使用“ – ”或“:”或不使用分隔符

为PHP开发人员

 filter_var($value, FILTER_VALIDATE_MAC) 

最好的答案是mac地址validation正则expression式

 ^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$