以下是我的做法:
LOREM_IPSUM = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.".split
STRING = [
'123 123 1234',
LOREM_IPSUM.shift(1 + rand(4)),
'123-123-1234',
LOREM_IPSUM.shift(1 + rand(4)),
'12 123 12345',
LOREM_IPSUM.shift(1 + rand(4)),
'123 1234567',
LOREM_IPSUM.shift(1 + rand(4)),
'123 123456789',
LOREM_IPSUM.shift(1 + rand(4)),
'123 12345',
LOREM_IPSUM.shift(1 + rand(4)),
'1234567',
LOREM_IPSUM.shift(1 + rand(4)),
'1234567890',
LOREM_IPSUM.shift(1 + rand(4)),
'123456789',
LOREM_IPSUM.shift(1 + rand(4)),
'(12)1234567',
].join(' ')
STRING # => "123 123 1234 Lorem ipsum dolor sit 123-123-1234 amet, consectetur adipisicing 12 123 12345 elit, sed do eiusmod 123 1234567 tempor 123 123456789 incididunt ut 123 12345 labore 1234567 et dolore magna aliqua. 1234567890 Ut enim ad minim 123456789 veniam, (12)1234567"
STRING.scan(/\d+.\d+.\d+/) # => ["123 123 1234", "123-123-1234", "12 123 12345", "123 1234567", "123 123456789", "123 12345", "1234567", "1234567890", "123456789", "12)1234567"]
STRING.scan(/\d+.\d+.\d+/).map{ |s| s.gsub(/\D+/, '') } # => ["1231231234", "1231231234", "1212312345", "1231234567", "123123456789", "12312345", "1234567", "1234567890", "123456789", "121234567"]
我删除了几个重复的格式以简化测试。
有很多方法可以格式化电话号码。“电话号码验证的综合正则表达式”是一个很好的想法起点。根据所选答案中的评论:
只需去除输入中的所有非数字字符(“x”除外)
我认为这是一个合理的起始模式:
/\d+.\d+.\d+/
在测试字符串上使用它会scan
捕获上面的所有示例电话号码。一旦你让他们遵循该答案中的下一条建议:
[...] 然后,当您显示时,重新格式化您的心满意足。