四位邮政编码必须严格匹配^\d{4}$,不能多一位、少一位,也不能带空格或字母;HTML5用pattern="\d{4}"基础校验,需搭配required;JS校验须用/^\d{4}$/.test(value)并trim();移动端推荐inputmode="numeric"。

四位邮政编码必须严格匹配 ^\d{4}$,不能多一位、少一位,也不能带空格或字母——这是最常被忽略的边界条件。
用 pattern 属性做基础校验
HTML5 的 pattern 是最轻量、最直接的方式,浏览器会在提交时自动拦截不合规输入:
<input type="text" name="postcode" pattern="\d{4}" title="请输入4位数字邮政编码">
-
pattern="\d{4}"表示“恰好4位数字”,^和$由浏览器自动隐式添加,无需手写 - 如果用户输入
123或12345,提交时会弹出title提示,且表单无法提交 - 注意:
pattern不校验空值,所以搭配required才完整:required pattern="\d{4}" - 缺陷:部分旧版 Safari 对
pattern支持不稳定;IE 完全不支持
JavaScript 中用 test() 做精确匹配
当需要实时反馈(比如 oninput 或 onblur)、兼容老浏览器,或要和后端逻辑对齐时,必须用 JS 显式校验:
const value = input.value.trim();<br>const isValid = /^\d{4}$/.test(value);
-
^\d{4}$必须加^和$,否则"1234abc"也会通过(因为子串匹配) -
trim()很关键:用户可能无意中输入空格,"1234 "会导致/^\d{4}$/.test("1234 ") === false - 别用
parseInt(value)判断——parseInt("1234abc")会返回1234,造成误判 - 错误示例:
/[0-9]\d{4}/(开头一个数字 + 后面四个数字 = 五位),或/\d{4}/(缺少锚点,子串匹配)
配合 inputmode 和 type 提升移动端体验
纯数字邮政编码,在手机上应直接唤起数字键盘,避免字母干扰:
立即学习“前端免费学习笔记(深入)”;
<input type="text" inputmode="numeric" pattern="\d{4}">
-
inputmode="numeric"比type="number"更合适:后者会允许小数点、负号,且在某些安卓浏览器中长按出现增减按钮 -
type="tel"虽然也唤出数字键盘,但语义错误(邮编不是电话),且部分浏览器会自动格式化(如加空格) - 不要依赖
maxlength="4"替代正则:用户粘贴超长内容时仍可能绕过,且无法阻止非数字字符
真正容易出问题的地方,是把「4位数字」当成「最多4位」或「包含4位数字」来处理——校验逻辑一旦松动,后端就得多一层清洗,数据一致性就难保障。



















