Javascript,使用正则表达式标准化电话号码字符串

Jor*_*ash 3 javascript node.js

我对正则表达式真的很陌生,但这就是我想要做的。

我有一个电话号码输入,我需要将它转换成这样的字符串:

'2228883333'

用户可能会像以下任何一种方式输入它:

222 888 3333
(222) 888 3333
12228883333
1 222 888 3333
1 (222) 888 3333
2228883333
+1 222 888 3333
Run Code Online (Sandbox Code Playgroud)

我想让用户输入它,但是他们最习惯,然后在服务器端(NodeJS)将电话号码转换为我想要的格式

这是我在 PHP 中尝试的正则表达式,但我不知道如何在 Javascript 中执行它。

var number = req.body.phone;
    number = number.replace('~.*(\d{3})[^\d]{0,7}(\d{3})[^\d]{0,7}(\d{4}).*~', '$1$2$3');
Run Code Online (Sandbox Code Playgroud)

知道如何在 NodeJS (Javascript) 中实现这一点吗?

rsp*_*rsp 8

如果您完全按照您的描述进行操作,那么当有人尝试从美国境外输入电话号码时,您的系统就会失败。

我建议在号码中保留 +1(或仅 1),并且仅当号码不包含其他国家/地区代码时才添加它。

我会在这里做什么:

  1. 删除除数字和加号以外的任何内容(并可能将前导 00 转换为 +)
  2. 如果字符串以加号开头,则不要添加任何内容
  3. 如果字符串以 1 开头,则添加一个加号
  4. 如果字符串以加号或 1 以外的任何其他内容开头,则添加 +1

例子:

var number = req.body.phone;
number = number.replace(/[^\d+]+/g, '');
number = number.replace(/^00/, '+');
if (number.match(/^1/)) number = '+' + number;
if (!number.match(/^\+/)) number = '+1' + number;
Run Code Online (Sandbox Code Playgroud)

现在,对于所有数字:

222 888 3333
(222) 888 3333
12228883333
1 222 888 3333
1 (222) 888 3333
2228883333
+1 222 888 3333
Run Code Online (Sandbox Code Playgroud)

加上一些额外的:

001 222 888 3333
001 (222) 888 3333
001(222)888-3333
Run Code Online (Sandbox Code Playgroud)

你应该有一个标准化的表示,但这次是:

+12228883333
Run Code Online (Sandbox Code Playgroud)

支持国际号码。如果需要,您可以删除加号:

number = number.replace(/^\+/, '');
Run Code Online (Sandbox Code Playgroud)

但我建议保留它,以便清楚地表明此号码包括处理该数据的任何人的国家/地区代码,并且这是一个任何人都可以在世界各地直接拨打的号码。