2015-08-26 3 views
0

«Действительный» MAC-адрес - это 6 групп шестнадцатеричных пар символов, разделенных тире или двоеточием.Regex для действительных MAC-адресов: не 88 | 87 | FF | 00

Пример:

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

Тем не менее, "недействительный" МАС-адрес содержит шестнадцатеричные пары, которые являются 00, FF, 88 или 87.

Пример:

00-00-00-00-00-00 
FF-FF-FF-FF-FF-FF 
88-88-88-88-87-88 

Это то, что я до сих пор:

(?!8)([0-9A-F]{2})([:-][0-9A-F]{2}){5} 

Но по какой-то причине я не знаю, почему я не могу использовать:

(?!88|87|FF|00) 

Для отрицательной части регулярного выражения.

ПРИМЕЧАНИЕ: Не дублируемая запись SO, поскольку она ищет недействительные шестнадцатеричные пары и исключает их.

+0

В правилах указано, что ни одно значение байта не может быть '00',' FF', '88' или' 87' или что вся строка не может быть '87-87-87-87-87-87'. ? – Dai

+1

Нет, этот вопрос имеет специальное дополнительное правило для 4-байтовых шаблонов, и это именно тот шаблон, который вызывает проблему здесь. – MSalters

+0

Зачем вам нужно делать это в одном регулярном выражении? Подтвердите MAC-адрес, а затем проверьте недействительные комбинации, используя группы захвата из этого первого теста. –

ответ

2

Используйте негативный взгляд вперед на весь вход:

^((?!00|FF|88|87)[0-9A-F]{2}([:-]|$)){6}$ 

live demo См.

Обратите внимание, что ваше регулярное выражение можно упростить, используя чередование для разделителя или конца ввода.

+0

Flipping awesome !!! Особенно разделитель или конец ввода таким образом, что вы можете повторить эту группу ровно столько раз, сколько требуется. Ты жжешь!!! Спасибо. – Vippy

+0

@Vippy ваше изменение меняет совпадение, поэтому я просто хочу проверить: «Действительно ли« FF-F2-C9-A6-88-4F' »(некоторые термины« хорошие », некоторые« плохие »)? – Bohemian

 Смежные вопросы

  • Нет связанных вопросов^_^