跳到主要内容

ArtinTech Solution

Validating Bangladeshi Mobile Numbers in a Checkout Form

没有校验的电话字段看似无害,直到快递员联系不上等着收包裹的客户。尤其是在手动下单表单中,员工要从通话或聊天截图里抄写号码,普通文本框每次都会放过输错的数字、错误的位数和无效的号段。

真正需要校验的格式

孟加拉国手机号码遵循明确的格式:共十一位,以 01 开头,接着是代表运营商的一位 3 到 9 的数字,再加八位数字,用正则表达式表示为 ^01[3-9]d{8}$。不符合这个格式的,就不是有效的孟加拉国手机号码,没有例外。

检查两次,出于两个不同的原因

我们在两个地方校验这个格式,各自解决不同的问题:

  • 浏览器端,即时校验。员工一输完,如果号码不匹配,字段旁边就会出现错误提示,改正后立即消失,在表单提交前就发现错误。
  • 服务器端,提交时校验。同样的检查会在创建订单的处理程序中再执行一次,如果前端校验被绕过(无论是禁用了 JavaScript 还是直接发请求),请求会被直接拒绝。浏览器端校验是一种体贴;服务器端校验才是真正的保障。

我们还在字段上设置了 maxlength="11" 和 inputmode="numeric",让手机默认弹出数字键盘,也根本无法输入第十二位数字:这些小细节让正确输入成为最省力的路径,而不是事后再靠校验来拦截。

要点总结

  • 只存在于浏览器中的校验不是真正的校验,只是一种便利。真正保护数据的是服务器端检查。
  • 校验规则应该对应它所代表的真实格式,而不是“看起来像电话号码”这种笼统的判断。
  • 像 inputmode 和 maxlength 这样的输入属性,能在校验逻辑运行之前就杜绝一整类错误。

相关阅读:满额自动选择免运费、为什么订单邮件到不了 Gmail。

在您自己的 WooCommerce 或 WordPress 后台遇到类似限制?和我们聊聊:ArtinTech Solution 正是打造这类定制店铺工具的团队。

Share this article

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注