验证用户输入的MAC地址的最佳方法是什么?
格式是HH:HH:HH:HH:HH:HH,每个H都是十六进制字符.
例如,00:29:15:80:4E:4A有效时00:29:804E4A无效.
650*_*502 49
如果你只是语法,那么这个正则表达式应该适合你
import re
...
if re.match("[0-9a-f]{2}([-:]?)[0-9a-f]{2}(\\1[0-9a-f]{2}){4}$", x.lower()):
...
Run Code Online (Sandbox Code Playgroud)
它接受12位十六进制数字与任一:或-有或全无作为隔板对之间(但隔板必须均匀...或者全部分离器:或全部-或不存在分离器).
这是解释:
[0-9a-f] 表示十六进制数字{2} 意味着我们想要其中两个[-:]?表示短划线或冒号,但可选.请注意,短划线作为第一个字符不是指范围,而仅表示其自身.此子表达式括在括号中,因此可以在以后作为后引用重用.[0-9a-f]{2} 是另一对十六进制数字\\1这意味着我们希望匹配之前匹配的相同表达式作为分隔符.这就是保证一致性的原因.请注意,regexp语法是,\1但我使用的是常规字符串,因此反斜杠必须通过加倍来转义.[0-9a-f]{2} 另一对十六进制数字{4} 上一个带括号的块必须重复4次,总共有6对数字: <pair> [<sep>] <pair> ( <same-sep> <pair> ) * 4$ 字符串必须在它们之后结束请注意,在Python中re.match只检查从字符串^的开头开始,因此不需要在开头的a .