REGEX验证MAC和分度器

时间:2018-08-28 14:27:45

标签: php regex

我想验证 MAC地址,并只允许使用一种定界符。 我使用模式:

^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$

它工作正常,但是有一些错误。
例如:01-23:45:67:89-AB根据模式是有效的。如何只允许使用一种定界符? 谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用

^[0-9A-Fa-f]{2}(?=([:-]))(?:\1[0-9A-Fa-f]{2}){5}$

请参见regex demo

详细信息

  • ^-字符串的开头
  • [0-9A-Fa-f]{2}-两个十六进制字符
  • (?=([:-]))-下一个字符必须为:-,此值将被捕获到组1中。
  • (?:\1[0-9A-Fa-f]{2}){5}-恰好出现了五次
    • \1-与第1组缓冲区中存储的字符相同
    • [0-9A-Fa-f]{2}-两个十六进制字符
  • $-字符串的结尾。

或者,为了稍微缩短模式,您也可以使用

^([0-9A-Fa-f]{2})(?=([:-]))(?:\2(?1)){5}$

请参见this regex demo。您还可以使用不区分大小写的修饰符来进一步“缩小”它:'~^([0-9A-F]{2})(?=([:-]))(?:\2(?1)){5}$~i'。事实是,模式的第一部分([0-9A-Fa-f]{2})被捕获,(?1)之后又重复了该模式(因此您无需再次编写)。