Regex 将不同的正则表达式组合为一个,以验证不同的MAC地址格式
我想要一个正则表达式来验证以下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正则表达式模式,我使用或组合它们进行验证,这看起来
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
[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验证也不正确。[:-]
应该分开。我想那就好了。谢谢你在答案中的编辑。但我想我会同意你们的建议,忽略大小写并将它们全部转换成小写。禁止混合大小写对于用户提供的值来说是个坏主意。忽略大小写差异。禁止混合大小写对于用户提供的值来说是个坏主意。忽略案例差异。