Mac Address RegEx过滤掉不良Macs

问题描述 投票:0回答:2

我有一个第三方应用程序,该应用程序具有一个MAC地址字段,我只能将RegEx应用于该字段以进行数据验证。我有一个RegEx,可以验证长度,十六进制和破折号/冒号。我的绊脚石试图阻止输入所有相同的字符,全0,全1等。

这是我到目前为止所拥有的:

/^(?:[A-Fa-f0-9]{2}([-:]{0,1}))(?:[A-Fa-f0-9]{2}\1){4}[A-Fa-f0-9]{2}$/
regex pcre mac-address
2个回答
0
投票

在PCRE中,您可以使用负前瞻来禁止某些特定模式。

/^(?!(.)\1(?:[-:]?\1\1)+$)[A-Fa-f0-9]{2}([-:]?)(?:[A-Fa-f0-9]{2}\2){4}[A-Fa-f0-9]{2}$/

注意,我也稍微重构了您的正则表达式。


1
投票

所有部分都匹配相同的字符类。您还可以使用负前瞻(?!.*([A-Fa-f0-9])\1)来启动模式,以检查是否在使用另一个反向引用之后没有2个相同的字符。

然后您当前的后向引用将从\1递增到\2

^(?!.*([A-Fa-f0-9])\1)(?:[A-Fa-f0-9]{2}([-:]?))(?:[A-Fa-f0-9]{2}\2){4}[A-Fa-f0-9]{2}$

Regex pattern

© www.soinside.com 2019 - 2024. All rights reserved.