Ruby 正则表达式 gsub 除开始时的 + 以外的任何其他字符(phone 数字)

Ruby regex gsub any other characters except + on start (phone number)

我希望将以下格式或无效格式补救为有效的 phone 号码:

1 (639)-234-2323 => 6392342323
2 (042)-982-2234 => 0429822234
3 0974829-928  => 0974829928
4 +83246-983-34 => +832459834
5 +836(737)-898+78 => +83673789878

我可以使用此代码,如果给出某个 1-4,我可以得到正确的结果,但如果 5,我真的要发疯了。

row[1] = row[1].gsub('(','').gsub(')','').gsub('-','').gsub(' ','')

此示例用于导入文件。所以你不能指望给用户一个提示。

我也愿意导入格式无效的记录,但应该将格式设置为可接受的 phone 数字(在任何地方或任何 + 符号内给出括号)。

EDIT 我想为我的 5 给出的示例找到一个解决方案。因为我不能在不删除第一个的情况下删除任何地方的 + 个标志。

编辑 2 我在评论部分再次询问我需要包含这样的 phone 格式:

6 (+65)92349577 => +6592348577

@WiktorStribiżew 建议使用以下正则表达式:s.gsub(/\A\(?(\+)|\D+/, '') 来自他的原始答案(被接受的答案)

解决方案是捕获第一个 + 并匹配所有其他 non-digit 符号:

s.gsub(/\A(\+)|\D+/, '')

regex demo

图案详情:

  • \A(\+) - 在字符串 (\A)
  • | - 或
  • \D+ - 一个或多个数字以外的字符。

替换中的</code>是对捕获组#1中存储的内容的反向引用,它恢复了替换结果</p>中的初始<code>+