Javascript,使用正则表达式规范化电话号码字符串
我对正则表达式真的很陌生,但下面是我要做的 我有一个电话号码输入,我需要将其转换为如下字符串:Javascript,使用正则表达式规范化电话号码字符串,javascript,node.js,Javascript,Node.js,我对正则表达式真的很陌生,但下面是我要做的 我有一个电话号码输入,我需要将其转换为如下字符串: '22288333' 用户可能会像以下任何一种方式一样键入它: 222 888 3333 (222) 888 3333 12228883333 1 222 888 3333 1 (222) 888 3333 2228883333 +1 222 888 3333 我想允许用户以他们最习惯的方式键入电话号码,然后在服务器端(NodeJS)将电话号码转换为我想要的格式 下面是我在PHP中尝试的正则表达式,
'22288333'
用户可能会像以下任何一种方式一样键入它:
222 888 3333
(222) 888 3333
12228883333
1 222 888 3333
1 (222) 888 3333
2228883333
+1 222 888 3333
我想允许用户以他们最习惯的方式键入电话号码,然后在服务器端(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');
你知道如何在NodeJS(Javascript)中实现这一点吗?用两个regex替换即可轻松实现:
const unformatPhone = phone => phone.replace(/\D/g, '').replace(/^1/, '');
这可能比用一个正则表达式可以找到的任何东西都要干净得多
第一个正则表达式
/\D/g
匹配任何非数字字符。第二个,/^1/
与前导的“1”匹配。用空字符串替换它们可以删除这两个字符。如果您完全按照您所描述的操作,那么当有人第一次尝试输入来自美国以外的电话号码时,您的系统将失败
我建议将+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;
现在,对于所有数字:
222 888 3333
(222) 888 3333
12228883333
1 222 888 3333
1 (222) 888 3333
2228883333
+1 222 888 3333
加上一些额外的:
001 222 888 3333
001 (222) 888 3333
001(222)888-3333
您应该有一个规范化表示,但这次是:
+12228883333
它支持国际数字。如果需要,可以删除加号:
number = number.replace(/^\+/, '');
但我建议保留该号码,以便清楚地知道该号码包括处理该数据的任何人的国家代码,这是一个任何人都可以在世界各地直接拨打的号码。那么空格呢?另外,如果号码(区号)以1开头,而用户省略了国家代码,这可能会切断区号的第一位数字。没有以一开头的区号。区号只能以2-9开头,特别是为了避免这个问题。@samanime虽然这是真的,但正如OP正确指出的,至少在北美,人们肯定会输入
1228883333
。很少有人会提供+1
,我敢打赌零人会使用001
@samanime:这当然不会尝试验证。但是这个函数有没有什么合理的格式不能正常化呢?非常好用!