我有一个第三方应用程序,它有一个MAC地址字段,我只能将RegEx应用于数据验证。我有一个可以验证长度、十六进制和破折号/冒号的RegEx。我的绊脚石是试图阻止输入所有相同的字符,全0,全1等等。
这就是我到目前为止所知道的:
/^(?:[A-Fa-f0-9]{2}([-:]{0,1}))(?:[A-Fa-f0-9]{2}\1){4}[A-Fa-f0-9]{2}$/发布于 2019-10-08 01:23:23
在PCRE中,您可以使用负向先行来禁止某些特定的模式。
/^(?!(.)\1(?:[-:]?\1\1)+$)[A-Fa-f0-9]{2}([-:]?)(?:[A-Fa-f0-9]{2}\2){4}[A-Fa-f0-9]{2}$/注意,我还稍微重构了您的正则表达式。
发布于 2019-10-08 01:31:48
所有部分都匹配相同的字符类。你也可以用一个负的前视(?!.*([A-Fa-f0-9])\1)来开始这个模式,以检查后面是否有两个相同的字符,使用另一个反向引用。
然后,当前的反向引用将从\1递增到\2
^(?!.*([A-Fa-f0-9])\1)(?:[A-Fa-f0-9]{2}([-:]?))(?:[A-Fa-f0-9]{2}\2){4}[A-Fa-f0-9]{2}$https://stackoverflow.com/questions/58274248
复制相似问题