我希望有一个正则表达式来验证以下MAC地址格式。
01-23-45-67-89-ab或01-23-45-67-89-AB01:23:45:67:89:ab或01:23:45:67:89:AB0123.4567.89ab或0123.4567.89AB0123456789ab或0123456789AB以上都是有效的MAC地址格式。
MAC地址应该有来自set [a-f A-F]的所有英文字母的大写字母或所有小写字母(但不是两者)。
目前,我正在使用6 regex模式,并且我已经将它们组合在一起,使用or进行验证,这看起来并不好。
这是我的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不好。任何帮助都将不胜感激。
发布于 2014-05-06 14:35:01
是的,这些正则表达式可以简化,然后组合成一个正则表达式来匹配所有这些情况。
这是它们的结合:
^([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()的第二个参数,以指定它应该是不区分大小写的。
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})$发布于 2014-05-06 14:34:58
MAC地址没有不同的格式,只有不同的呈现方式。MAC地址是一个12个字符长的十六进制字符串。
你应该改变方法。与其接受不同的格式并将用户输入与多个正则表达式匹配,不如转换用户输入并将其与一个正则表达式匹配。
https://stackoverflow.com/questions/23497456
复制相似问题