Проверка регулярного выражения MAC-адреса для значений, разделенных запятой, двоеточием или тире - PullRequest
0 голосов
/ 20 февраля 2019

Я использую следующее регулярное выражение для проверки MAC-адресов:

pattern("^([a-fA-f0-9]){12}(,\s*([a-fA-f0-9]){12})*$")

, и оно отлично работает для следующих входных данных:

12aeabc11bba,662baea1abc2

Я хотел бы улучшить его для поддержкиследующие стили MAC-адреса:

12-ae-ab-c1-1b-ba,66-2b-ae-a1-ab-c2
12ae-abc1-1bba,662b-aea1-abc2
12:ae:ab:c1:1b:ba,66:2b:ae:a1:ab:c2
12ae:abc1:1bba,662b:aea1:abc2
12aeabc11bba,662baea1abc2

Для Regex не требуется поддержка следующих стилей MAC-адреса, однако, если Regex разрешает это, то все в порядке:

12:ae:ab:c1:1b:ba,66-2b-ae-a1-ab-c2
2134:12:12:1234,ae-12-ae-42-62-ae
ae12-bc33-a122,fe12:ae12:ab54
ae12:bc33-a122

IЯ использую Angular5, и эта проверка передается в проверку FormBuilder, поэтому я не думаю, что могу использовать несколько шаблонов.

this.requestForm = this.fb.group({
    macAddresses: ['', [Validators.required, Validators.pattern("^([a-fA-f0-9]){12}(,\s*([a-fA-f0-9]){12})*$")]]
});

Может кто-нибудь помочь решить проблему?

Тот, кто ответит на этот вопрос самым чистым решением, получит награду в размере 100 представителей

1 Ответ

0 голосов
/ 20 февраля 2019

Попробуйте это регулярное выражение:

^[a-fA-F0-9]{2}(?:[:-]?[a-fA-F0-9]{2}){5}(?:,[a-fA-F0-9]{2}(?:[:-]?[a-fA-F0-9]{2}){5})*$

Нажмите для демонстрации

Объяснение:

  • ^ - устанавливает начало строки
  • [a-fA-F0-9]{2} - соответствует 2 вхождению цифры или буквы в диапазоне a-f или A-F
  • (?:[:-]?[a-fA-F0-9]{2}){5} - соответствует 0 или 1 вхождению либо :, либо -.затем 5 вхождений либо цифры, либо буквы в диапазоне a-f или A-F
  • (?:,[a-fA-F0-9]{2}(?:[:-]?[a-fA-F0-9]{2}){5})* - соответствует ,, за которым следует MAC-адрес.* в конце указывает 0+ вхождений ,, за которым следует MAC-адрес.
  • $ - устанавливает конец строки.
...