Regex 将不同的正则表达式组合为一个,以验证不同的MAC地址格式

Regex 将不同的正则表达式组合为一个,以验证不同的MAC地址格式,regex,Regex,我想要一个正则表达式来验证以下MAC地址格式 01-23-45-67-89-ab或01-23-45-67-89-ab 01:23:45:67:89:ab或01:23:45:67:89:ab 0123.4567.89ab或0123.4567.89ab 0123456789ab或0123456789ab 以上所有都是有效的MAC地址格式 MAC地址应包含set[a-f a-f]中所有英文字母的大写字母或小写字母(但不能同时包含两者) 目前我使用的是6正则表达式模式,我使用或组合它们进行验证,这看起来

我想要一个正则表达式来验证以下MAC地址格式

  • 01-23-45-67-89-ab
    01-23-45-67-89-ab
  • 01:23:45:67:89:ab
    01:23:45:67:89:ab
  • 0123.4567.89ab
    0123.4567.89ab
  • 0123456789ab
    0123456789ab
  • 以上所有都是有效的MAC地址格式

    MAC地址应包含set
    [a-f a-f]
    中所有英文字母的大写字母或小写字母(但不能同时包含两者)

    目前我使用的是
    6正则表达式
    模式,我使用
    组合它们进行验证,这看起来不太好

    以下是我的Javascript代码:

        var value='01-23-45-67-89-ab';
        var regex = new RegExp("^([0-9a-f]{2}){6}$");
        var regex1 = new RegExp("^([0-9A-F]{2}){6}$");
        var regex2 = new RegExp("^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$");
        var regex3 = new RegExp("^([0-9a-f]{2}[:-]){5}([0-9a-f]{2})$");
        var regex4 = new RegExp("^([0-9a-f]{4}[\\.]){2}[0-9a-f]{4}$");
        var regex5 = new RegExp("^([0-9A-F]{4}[\\.]){2}[0-9A-F]{4}$");
    
        if (regex.test(value) || regex1.test(value)|| regex2.test(value)|| regex3.test(value)|| regex4.test(value)|| regex5.test(value)){
                return true;
            }
        else{
            return false;
        }
    
    有没有更好的方法可以不用
    将它们组合起来?
    我不擅长
    regex

    任何帮助都将不胜感激。

    MAC地址没有不同的格式,只有不同的显示方式。MAC地址是一个12个字符长的十六进制字符串

    你应该改变方法。与其接受各种格式并根据几个正则表达式匹配用户输入,不如转换用户输入并将其与一个正则表达式匹配

    • 接受用户输入
    • 删除冒号(:)
    • 删除破折号(-)
    • 删除空格()
    • 转换为全大写
    • 证实

      • MAC地址没有不同的格式,只有不同的显示方式。MAC地址是一个12个字符长的十六进制字符串

        你应该改变方法。与其接受各种格式并根据几个正则表达式匹配用户输入,不如转换用户输入并将其与一个正则表达式匹配

        • 接受用户输入
        • 删除冒号(:)
        • 删除破折号(-)
        • 删除空格()
        • 转换为全大写
        • 证实

        是的,这些正则表达式可以简化,然后组合成一个正则表达式,以匹配所有这些情况

        这是它们的结合:

        ^([0-9A-F]{12}|(?:[0-9A-F]{2}:){5}[0-9A-F]{2}|(?:[0-9A-F]{2}-){5}[0-9A-F]{2}|(?:[0-9A-F]{4}\.){2}[0-9A-F]{4})$
        

        请注意,您不必复制正则表达式来同时考虑大小写,您只需指定
        “i”
        作为
        new RegExp()
        的第二个参数,以指定它应该是不区分大小写的匹配

        var regex = new RegExp("^([0-9A-F]{12}|(?:[0-9A-F]{2}:){5}[0-9A-F]{2}|(?:[0-9A-F]{2}-){5}[0-9A-F]{2}|(?:[0-9A-F]{4}\.){2}[0-9A-F]{4})$", "i");
        
        if( regex.test( value ) )
        {
            //true
        }
        

        根据对这个答案的评论中的要求,这里有一个不允许案例混合的版本

        ^([0-9A-F]{12}|[0-9a-f]{12}|(?:[0-9A-F]{2}:){5}[0-9A-F]{2}|(?:[0-9a-f]{2}:){5}[0-9a-f]{2}|(?:[0-9A-F]{2}-){5}[0-9A-F]{2}|(?:[0-9a-f]{2}-){5}[0-9a-f]{2}|(?:[0-9A-F]{4}\.){2}[0-9A-F]{4}|(?:[0-9a-f]{4}\.){2}[0-9a-f]{4})$
        

        是的,这些正则表达式可以简化,然后组合成一个正则表达式来匹配所有这些情况

        这是它们的结合:

        ^([0-9A-F]{12}|(?:[0-9A-F]{2}:){5}[0-9A-F]{2}|(?:[0-9A-F]{2}-){5}[0-9A-F]{2}|(?:[0-9A-F]{4}\.){2}[0-9A-F]{4})$
        

        请注意,您不必复制正则表达式来同时考虑大小写,您只需指定
        “i”
        作为
        new RegExp()
        的第二个参数,以指定它应该是不区分大小写的匹配

        var regex = new RegExp("^([0-9A-F]{12}|(?:[0-9A-F]{2}:){5}[0-9A-F]{2}|(?:[0-9A-F]{2}-){5}[0-9A-F]{2}|(?:[0-9A-F]{4}\.){2}[0-9A-F]{4})$", "i");
        
        if( regex.test( value ) )
        {
            //true
        }
        

        根据对这个答案的评论中的要求,这里有一个不允许案例混合的版本

        ^([0-9A-F]{12}|[0-9a-f]{12}|(?:[0-9A-F]{2}:){5}[0-9A-F]{2}|(?:[0-9a-f]{2}:){5}[0-9a-f]{2}|(?:[0-9A-F]{2}-){5}[0-9A-F]{2}|(?:[0-9a-f]{2}-){5}[0-9a-f]{2}|(?:[0-9A-F]{4}\.){2}[0-9A-F]{4}|(?:[0-9a-f]{4}\.){2}[0-9a-f]{4})$
        

        你从哪里得到的图形?图形可视化来自
        AB:AB:AB:AB:AB-AB
        根据你的正则表达式是正确的。在我的问题中,我认为我的mac验证也不正确。
        [:-]
        应该分开。我想那就好了。谢谢你在答案中的编辑。但我想我会同意你们的建议,忽略大小写,将它们全部转换成小写。你们从哪里得到的图形?图形可视化来自
        AB:AB:AB:AB-AB
        根据你们的正则表达式是正确的。在我的问题中,我认为我的mac验证也不正确。
        [:-]
        应该分开。我想那就好了。谢谢你在答案中的编辑。但我想我会同意你们的建议,忽略大小写并将它们全部转换成小写。禁止混合大小写对于用户提供的值来说是个坏主意。忽略大小写差异。禁止混合大小写对于用户提供的值来说是个坏主意。忽略案例差异。