我有一个第三方应用程序,该应用程序具有一个MAC地址字段,我只能将RegEx应用于该字段以进行数据验证。我有一个RegEx,可以验证长度,十六进制和破折号/冒号。我的绊脚石试图阻止输入所有相同的字符,全0,全1等。
这是我到目前为止所拥有的:
/^(?:[A-Fa-f0-9]{2}([-:]{0,1}))(?:[A-Fa-f0-9]{2}\1){4}[A-Fa-f0-9]{2}$/
在PCRE中,您可以使用负前瞻来禁止某些特定模式。
/^(?!(.)\1(?:[-:]?\1\1)+$)[A-Fa-f0-9]{2}([-:]?)(?:[A-Fa-f0-9]{2}\2){4}[A-Fa-f0-9]{2}$/
注意,我也稍微重构了您的正则表达式。
所有部分都匹配相同的字符类。您还可以使用负前瞻(?!.*([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}$