纯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
相关产品推荐
相关产品推荐

