MAC地址正则表达式验证,用于逗号分隔,冒号或短划线分隔值

问题描述 投票:2回答:1

我使用以下Regex验证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

正则表达式不需要支持以下MAC地址样式,但如果正则表达式允许这样做,则可以:

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

我正在使用Angular5,这个验证被传递给FormBuilder验证,所以我认为我不能放入多种模式。

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

任何人都可以帮助解决问题吗?

无论谁用最干净的解决方案回答这个问题,都将获得100个代表的赏金奖励

javascript regex angular mac-address
1个回答
2
投票

试试这个正则表达式:

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

Click for Demo

说明:

  • ^ - 断言线的起点
  • [a-fA-F0-9]{2} - 匹配a-fA-F范围内的数字或字母的2次出现
  • (?:[:-]?[a-fA-F0-9]{2}){5} - 匹配:-的0或1次出现。然后在a-fA-F范围内出现5次数字或字母
  • (?:,[a-fA-F0-9]{2}(?:[:-]?[a-fA-F0-9]{2}){5})* - 匹配,,然后是MAC地址。最后的*表示,出现0次以上,然后是MAC地址。
  • $ - 断言该行的结束。
© www.soinside.com 2019 - 2024. All rights reserved.