首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将不同的正则表达式组合为一个,以验证不同的MAC地址格式。

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

Stack Overflow用户
提问于 2014-05-06 14:23:52
回答 2查看 371关注 0票数 0

我希望有一个正则表达式来验证以下MAC地址格式。

  1. 01-23-45-67-89-ab01-23-45-67-89-AB
  2. 01:23:45:67:89:ab01:23:45:67:89:AB
  3. 0123.4567.89ab0123.4567.89AB
  4. 0123456789ab0123456789AB

以上都是有效的MAC地址格式。

MAC地址应该有来自set [a-f A-F]的所有英文字母的大写字母或所有小写字母(但不是两者)。

目前,我正在使用6 regex模式,并且我已经将它们组合在一起,使用or进行验证,这看起来并不好。

这是我的Javascript代码:

代码语言: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;
    }

有什么更好的方法可以不使用or来组合它们呢?我对regex不好。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-06 14:35:01

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

这是它们的结合:

代码语言:javascript
复制
^([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})$

注意,您不必重复regex来解释小写和上大写,您只需将"i"指定为new RegExp()的第二个参数,以指定它应该是不区分大小写的。

代码语言:javascript
复制
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
}

正如对这个答案的评论中所要求的,这里有一个不允许混合案例的版本.

代码语言:javascript
复制
^([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})$
票数 4
EN

Stack Overflow用户

发布于 2014-05-06 14:34:58

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

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

  • 接受用户输入
  • 移除冒号(:)
  • 移除破折号(-)
  • 删除空格()
  • 转换为所有大写
  • 验证
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23497456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档