MAC 解决以逗号分隔、冒号或破折号分隔的值的正则表达式验证
MAC Address regex validation for comma separated, colon or dash delimited values
我正在使用以下正则表达式来验证 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})*$
解释:
^
- 断言行的开头
[a-fA-F0-9]{2}
- 匹配 a-f
或 A-F
范围内出现 2 次的数字或字母
(?:[:-]?[a-fA-F0-9]{2}){5}
- 匹配 0 次或 1 次出现的 :
或 -
。后跟 a-f
或 A-F
范围内的数字或字母出现 5 次
(?:,[a-fA-F0-9]{2}(?:[:-]?[a-fA-F0-9]{2}){5})*
- 匹配 ,
后跟 MAC 地址。末尾的 *
表示出现 0+ 次 ,
后跟 MAC 地址。
$
- 断言行尾。
我正在使用以下正则表达式来验证 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})*$
解释:
^
- 断言行的开头[a-fA-F0-9]{2}
- 匹配a-f
或A-F
范围内出现 2 次的数字或字母
(?:[:-]?[a-fA-F0-9]{2}){5}
- 匹配 0 次或 1 次出现的:
或-
。后跟a-f
或A-F
范围内的数字或字母出现 5 次
(?:,[a-fA-F0-9]{2}(?:[:-]?[a-fA-F0-9]{2}){5})*
- 匹配,
后跟 MAC 地址。末尾的*
表示出现 0+ 次,
后跟 MAC 地址。$
- 断言行尾。