답변:
사람에게 친숙한 형식으로 MAC-48 주소를 인쇄하기위한 표준 (IEEE 802) 형식은 하이픈
-
또는 콜론으로 구분 된 두 개의 16 진수 숫자로 구성된 6 개 그룹입니다:
.
그래서:
^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
눈에 약간 딱딱하지만 이것은 :
/^(?:[[:xdigit:]]{2}([-:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/
MAC 표기법에 모든 콜론 또는 모든 대시를 적용합니다.
( A1:B2-C3:D4-E5:F6
예를 들어, 더 간단한 정규식 접근 방식은을 허용 할 수 있습니다 .
:xdigit:
는 16 진수의 줄임말로 [a-fA-F0-9]
. 는 \1
첫 번째 대시 또는 콜론의 캡처 그룹을 참조 ([-:])
하고, 해당 처음으로 일치하는 것과 일치.
:xdigit:
( "줄임"이 더 짧고 [a-fA-F0-9]
동등 항목 /[a-f0-9]/i
이 더 짧지 만!)
C8:FD:19:55:E6:3A
실패한 이유를 설명해 주 시겠습니까? 실제 MAC 주소입니다. 나는 허용하도록 정규식을 수정 한 :
경우에만 /^(?:[[:xdigit:]]{2}([:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/
감사합니다!
이 정규식은 다음과 같은 Cisco 형식을 포함하여 거의 모든 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
혼합 형식도 일치합니다!
aa.aa.bbbb.cccc
합니다. 예를 들어.
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I
0x10을 아래 제로는 삭제 선도 어떤 진수 인 경우, BSSID 라인, 및 모양 ( %x
또는 %2x
보다는 %02x
printf
형식이 사용?)
구분자 : " : ", " - ", " . "
이중 또는 단일 : 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 ...
{1,2}
정규식 이 필요합니다
[0-9a-F]
다음과 같이 다시 작성되어야합니다.[0-9a-fA-F]
유니 코드 속성 \p{xdigit}
에는 FULLWIDTH 버전이 포함되어 있습니다. \p{ASCII_Hex_Digit}
대신 선호 할 수 있습니다 .
질문에 대한 답변은 다음과 같이 입력하여 가장 좋은 답변이 될 수 있습니다. 특정 CPAN 모듈이 설치되어있는 경우 :
% 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
당신이 찾고있는 것 같은데.
이 링크 가 도움 이 될 수 있습니다. 이것을 사용할 수 있습니다.(([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})
이 질문 도 참조하십시오 .
정규식은 다음과 같습니다.
^[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}$
파이썬 버전은 다음과 같습니다.
re.compile(r'\A(?:[\da-f]{2}[:-]){5}[\da-f]{2}\Z',re.I)
/^(([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
PHP 개발자 용
filter_var($value, FILTER_VALIDATE_MAC)
확인을 위해 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();
}
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
아마도 가능한 가장 짧은 것 :
/([\da-f]{2}[:-]){5}[\da-f]{2}/i
업데이트 : 하이픈 스타일 및 콜론 스타일 MAC 주소를 모두 지원하는 PHP에서 MAC 주소를 확인하는 더 좋은 방법이 있습니다. 사용 ) (filter_var :
// Returns $macAddress, if it's a valid MAC address
filter_var($macAddress, FILTER_VALIDATE_MAC);
아시다시피 다음 형식의 MAC 주소를 지원합니다 (x : 16 진수).
xx:xx:xx:xx:xx:xx
xx-xx-xx-xx-xx-xx
xxxx.xxxx.xxxx
위 의 훌륭한 답변에 대해 @Moshe 에게 감사드립니다 . 좀 더 많은 연구를 한 후에 IEEE 802와 관련하여 정규식에서 일관된 구분 기호 사용을 시행하는 것과 관련하여 추가 결과를 추가하고 싶습니다.
사람에게 친숙한 형식으로 MAC-48 주소를 인쇄하기위한 표준 (IEEE 802) 형식은 하이픈으로 구분 된 두 개의 16 진수 숫자 그룹 6 개입니다 . 그러나 콜론 : 및 마침표 로 구분 된 4 개의 16 진수로 구성된 세 그룹 도 허용하는 것이 널리 채택 된 규칙 입니다. .
전체 신용 정보는 다음의 제품에 @Moshe 자신의 초기 진술 여기,하고 @pilcrow 에 대한 지적 IEEE 802 만 hypens를 다루고있다.
다음은 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}))$