标准MAC地址的正则表达式为^([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}$,严格匹配6组十六进制字节、支持冒号或短横线分隔、大小写兼容,且通过^和$确保全字符串匹配。

Mac地址的正则表达式长什么样
HTML 原生 input 的 pattern 属性不支持正则修饰符(如 i 忽略大小写),也不支持 Unicode 或复杂断言,所以必须用纯 ASCII 字符写出**完整、严格、大小写兼容**的模式。标准 Mac 地址格式是 6 组十六进制字节,以 :、- 或无分隔符连接,常见写法有:00:1A:2B:3C:4D:5E、00-1a-2b-3c-4d-5e、001a2b3c4d5e。
最稳妥的 pattern 是:^([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}$
- 开头
^和结尾$强制全匹配,防止用户输00:1A:2B:3C:4D:5E:extra这类超长串 -
[0-9A-Fa-f]{2}匹配两个合法十六进制字符(大小写都接受) -
[:-]允许冒号或短横线作分隔符,不能写成[:\-]—— 在字符组里连字符放末尾才不用转义 -
{5}表示前 5 组“两位+分隔符”,最后再补一组两位,避免匹配到 5 组或 7 组
为什么不能用 \b 或 \s 边界
pattern 属性在 HTML 中只做字符串前缀/全量匹配,\b(单词边界)和 \s(空白符)在该上下文中无效或行为不可靠——浏览器不会把输入框内容当多行文本处理,也没有词边界概念。
- 写
\b[0-9A-Fa-f]{12}\b看似简洁,但会校验失败:用户输001a2b3c4d5e时,\b在首尾无法正确触发 - 空格、换行等用户意外输入会被
^$自动拦住,不需要额外加\s* - 如果真要支持两端空格,得靠 JS trim 后再校验,HTML pattern 不负责这个
实际用在 input 标签里怎么写
直接把 pattern 塞进属性即可,注意引号闭合和转义(HTML 属性值里不需要对正则内部的 : - 转义):
<input type="text" pattern="^([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}$" title="请输入合法的 MAC 地址,例如:00:1A:2B:3C:4D:5E">
-
title属性很重要——它会在校验失败时作为提示文案显示,不写的话提示可能是晦涩的 “Please match the requested format” - 不要加
required以外的验证属性(比如minlength),它们和pattern冲突,浏览器优先级不一致 - 移动端键盘不会自动切为十六进制输入模式,得靠用户自觉;若需体验优化,得用 JS 配合
inputmode="text"+ 自定义软键盘逻辑
这个正则漏掉了哪些合法格式
它不支持以下现实中偶尔出现的变体:
-
001A.2B3C.4D5E(思科常用点分格式)——需要额外分支:^([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4}$ - 大写
X开头的 EUI-64(如00:1A:2B:FF:FE:3C:4D:5E)——这不是标准 Mac 地址,而是 IPv6 接口 ID,长度 8 组,pattern 应单独处理 - 带括号或空格的用户输入(如
00 : 1A : 2B : 3C : 4D : 5E)——HTML pattern 无法跳过空格,必须用 JS 预处理
真正要覆盖全场景,光靠 HTML pattern 不够,得配合 JS 的 trim() 和 replace(/\s/g, '') 清洗后再走正则。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











