You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

纯Ruby实现无需正则和额外gem的英国手机号校验格式化工具

纯Ruby实现英国手机号码验证格式化模块

实现思路

  • 全程使用Ruby字符串原生方法,完全避免正则表达式,保证可读性
  • 先清洗输入,移除所有空格,再单独提取数字字符做长度校验
  • 分别匹配三种合法前缀规则,校验通过后统一格式化为+447开头的标准格式
  • 校验失败直接抛出参数错误

完整实现代码

module Uk
  STANDARD_PREFIX = '+447'

  def self.format(number)
    # 移除所有空格,转为字符串避免数字类型输入问题
    cleaned = number.to_s.delete(' ')
    # 提取所有数字字符(无正则实现)
    digits = cleaned.chars.filter { |c| c.between?('0', '9') }.join

    suffix = case
    when cleaned.start_with?('+447') && digits.length == 12
      digits[3..-1]
    when cleaned.start_with?('447') && digits.length == 12
      digits[3..-1]
    when cleaned.start_with?('07') && digits.length == 11
      digits[2..-1]
    else
      raise ArgumentError, "无效的英国手机号码"
    end

    "#{STANDARD_PREFIX}#{suffix}"
  end
end

测试示例

  • 输入071234 56789:Uk.format("071234 56789") 返回 "+447123456789"
  • 输入447123456789:Uk.format("447123456789") 返回 "+447123456789"
  • 输入+447123456789:Uk.format("+447123456789") 返回 "+447123456789"
  • 输入063434:调用方法抛出ArgumentError: 无效的英国手机号码

内容的提问来源于stack exchange,提问作者mr_muscle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:06:05