采用以下格式:
3D:F2:C9:A6:B3:4F
或:
3D-F2-C9-A6-B3-4F
答案 0 :(得分:239)
标准(IEEE 802)格式 打印MAC-48地址 人性化的形式是六组 两个十六进制数字,用。分隔 连字符
-
或冒号:
。
所以:
^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
答案 1 :(得分:20)
眼睛有点硬,但是这个:
/^(?:[[:xdigit:]]{2}([-:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/
将强制执行MAC表示法的所有冒号或所有破折号。
(更简单的正则表达式方法可能允许A1:B2-C3:D4-E5:F6
,例如,上述拒绝。)
答案 2 :(得分:7)
这个正则表达式几乎匹配每种mac格式,包括思科格式,如0102-0304-abcd
^([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:]]{2}$
匹配的示例字符串:
01:02:03:04:ab:cd
01-02-03-04-ab-cd
01.02.03.04.ab.cd
0102-0304-abcd
01020304abcd
混合格式也将匹配!
答案 3 :(得分:6)
分隔符:“:”,“ - ”,“。”
double或single: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 ...
答案 4 :(得分:4)
警告Unicode属性\p{xdigit}
包含FULLWIDTH版本。您可能更喜欢\p{ASCII_Hex_Digit}
。
如果您安装了某个令人尊敬的CPAN模块,可以通过输入以下内容来回答问题的答案:
% perl -MRegexp::Common -lE 'say $RE{net}{MAC}'
我将here输出的特定模式显示为幸运模式编号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
这似乎是你正在寻找的东西。
答案 5 :(得分:4)
这link可能会对您有所帮助。您可以使用此:(([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})
答案 6 :(得分:2)
/(?:[A-Fa-f0-9]{2}[:-]){5}(?:[A-Fa-f0-9]{2})/
答案 7 :(得分: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}-[0-9A-F]{2}$
答案 8 :(得分:1)
python版本可以是:
re.compile(r'\A(?:[\da-f]{2}[:-]){5}[\da-f]{2}\Z',re.I)
答案 9 :(得分:1)
for PHP developer
filter_var($value, FILTER_VALIDATE_MAC)
答案 10 :(得分:1)
/^(([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})?$/
以上正则表达式验证以下所有mac地址类型:
01-23-45-67-89-ab
01:23:45:67:89:ab
0123.4567.89ab
答案 11 :(得分:0)
PHP人物:
print_r(preg_match('/^(?:[0-9A-F]{2}[:]?){5}(?:[0-9A-F]{2}?)$/i', '00:25:90:8C:B8:59'));
答案 12 :(得分:0)
您可以通过传递用于验证的mac地址来使用以下过程
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();
}
答案 13 :(得分:0)
如果您需要数字之间的空格,例如此变体
@property (nonatomic, strong, readonly) UIView *currentItemView;
正则表达式将更改为
3D : F2 : C9 : A6 : B3 : 4F
答案 14 :(得分:0)
匹配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/
这允许使用' - '或':'或不使用分隔符
答案 15 :(得分:0)
也许是最短的时间:
/([\da-f]{2}[:-]){5}[\da-f]{2}/i
更新:存在一种更好的方法来验证PHP中的MAC地址,该地址同时支持连字符样式和冒号样式的MAC地址。使用filter_var():
// Returns $macAddress, if it's a valid MAC address
filter_var($macAddress, FILTER_VALIDATE_MAC);
据我所知,它支持以下形式的MAC地址(x:十六进制数):
xx:xx:xx:xx:xx:xx
xx-xx-xx-xx-xx-xx
xxxx.xxxx.xxxx
答案 16 :(得分:0)
非常感谢@Moshe以上的great answer。经过更多研究后,我想补充一下我的其他发现,包括关于IEEE 802和在正则表达式中强制使用一致的分隔符。
用于打印MAC-48地址的标准(IEEE 802)格式 对人类友好的形式是六组,每组两个十六进制数字 通过连字符-。但是,被广泛采用的惯例也允许冒号, 以及由句点。隔开的三组四个十六进制数字。
这里对@Moshe的最初声明表示敬意,对@pilcrow的pointing out表示敬意,IEEE 802仅涵盖连字符。
这是一个正则表达式,强制在整个mac地址中使用相同的分隔符:
^(?:(?:[0-9A-Fa-f]{2}(?=([-:]))(?:\1[0-9A-Fa-f]{2}){5}))$
这是另外一个,它根本不使用分隔符:
^(?:(?:[0-9A-Fa-f]{2}(?=([-:]|))(?:\1[0-9A-Fa-f]{2}){5}))$
答案 17 :(得分:0)
由于MAC地址可以是6或20个字节(无限带宽,...),正确的答案是:
^([0-9A-Fa-f]{2}:){5}(([0-9A-Fa-f]{2}:){14})?([0-9A-Fa-f]{2})$
您可以用[:-。]替换:吗?如果您要使用其他分隔符或不使用分隔符。
答案 18 :(得分:0)
我认为主RegEx不正确,因为它也可以分类
'3D-F2-C9:A6-B3:4F'
作为有效的MAC地址,即使它不正确。 正确的是:
((([a-zA-z0-9]{2}[-:]){5}([a-zA-z0-9]{2}))|(([a-zA-z0-9]{2}:){5}([a-zA-z0-9]{2})))
这样,每次您都可以为整个MAC地址选择“:”或“-”。
答案 19 :(得分:0)
mac 地址可以是 48 位或 64 位。
ad:12:13:fc:14:ee // 48 bit, with colons
ad-12-13-fc-14-ee // 48 bit, with dashes
ad1213fc14ee // 48 bit, without any delimiter
AD:12:13:FC:14:EE // 48 bit, uppercase.
AD:12:13:FC:14:EE:FF:FF // 64 bit, uppercase
ad:12:13:fc:14:ee:13:ad // 64 bit, lowercase
ad-12-13-fc-14-ee-ff-ad // 64 bit, with dashes
ad1213fc14eeffae // 64 bit, without any delimter
如果您正在寻找可以验证上述所有情况(有效)的正则表达式,则以下方法可行:
对于 48 位,我们可以使用这个:
^[0-9A-Fa-f]{2}([:-]?)(?:[0-9A-Fa-f]{2}\1){4}[0-9A-Fa-f]{2}$
对于 64 位,我们可以使用这个:
^[0-9A-Fa-f]{2}([:-]?)(?:[0-9A-Fa-f]{2}\1){6}[0-9A-Fa-f]{2}$
如果您正在寻找一个正则表达式来验证两种 mac 地址,请使用 OR 运算符来连接它们。
答案 20 :(得分:-1)
这是一个很小的:
(([0-9A-F]{2}[:-]?){6})
请记住,几种字符或分隔符的奇怪混合可能会通过。
答案 21 :(得分:-4)
最佳答案是mac地址验证正则表达式
^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$