我想验证 MAC地址,并只允许使用一种定界符。 我使用模式:
^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
它工作正常,但是有一些错误。
例如:01-23:45:67:89-AB
根据模式是有效的。如何只允许使用一种定界符?
谢谢。
答案 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)
之后又重复了该模式(因此您无需再次编写)。