我正在使用以下正则表达式来验证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


我正在使用Angular5,并且此验证将传递给FormBuilder验证,因此我认为我不能放入多种模式。

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


谁能解决这个问题?

谁用最干净的方法回答这个问题,将获得100 rep的赏金奖励

最佳答案

试试这个正则表达式:

^[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}-匹配2个出现在a-fA-F范围内的数字或字母
(?:[:-]?[a-fA-F0-9]{2}){5}-匹配:-的0或1出现。后跟5次出现在a-fA-F范围内的数字或字母
(?:,[a-fA-F0-9]{2}(?:[:-]?[a-fA-F0-9]{2}){5})*-匹配,后跟MAC地址。末尾的*表示0次以上的,,后跟MAC地址。
$-声明行的结尾。

关于javascript - MAC地址正则表达式验证,以逗号分隔,冒号或破折号分隔的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54784941/

10-11 12:32