我正在使用以下正则表达式来验证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的赏金奖励
答案 0 :(得分:2)
尝试此正则表达式:
^[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地址。$
-声明该行的结尾。