Javascript 修剪+;电话号码node.js中的1个

Javascript 修剪+;电话号码node.js中的1个,javascript,regex,node.js,Javascript,Regex,Node.js,我有一个字符串,其中包含以下格式的电话号码: +12345678912 我想从字符串中删除+1,使其如下所示: 2345678912 如何在node.js中使用正则表达式不要使用正则表达式简单地从字符串开头删除+1;这太过分了。在这种情况下,可以说: if (phoneNumber && phoneNumber.indexOf('+1') === 0) { phoneNumber = phoneNumber.substring(2); } 然而,解决国家代码问题的一般解

我有一个字符串,其中包含以下格式的电话号码: +12345678912

我想从字符串中删除+1,使其如下所示: 2345678912


如何在node.js中使用正则表达式不要使用正则表达式简单地从字符串开头删除
+1
;这太过分了。在这种情况下,可以说:

if (phoneNumber && phoneNumber.indexOf('+1') === 0) {
    phoneNumber = phoneNumber.substring(2);
}
然而,解决国家代码问题的一般解决方案必须考虑在几个地方存在的所有已知的国家代码,包括。不过,它需要几行代码。您必须考虑以下事项:

  • 如果字符串以
    +1
    开头,则国家代码为1
  • 如果字符串以
    +2
    开头,则如果下一个字符是
    0
    7
    ,则为两位国家代码,否则,如果第二个字符是
    8
    ,则为错误,否则为三位代码
+
后面的第一个数字是3到9,也有类似的规则

在这一点上,正则表达式变成了一个有趣的,虽然看起来很疯狂的解决方案,但它有以下形式

^\+[1|2[07]|2[1-69]\d|  ..the rest of it goes here...  ]
一个相关的问题:

编辑


使一般问题变得困难的事情之一是,国家代码列表可能会扩大。目前,没有以28开头的国家/地区代码,但该组保留供将来扩展,因此如果分配了新代码,您的代码将不得不更改。完整的正则表达式确实很长,很难阅读,而且容易出错。某种带有函数的表驱动方法可能是最好的方法,但除非你从事电信业务,否则我认为你可以编写一个应用程序,使呼叫代码与号码保持不同。:)

不要使用正则表达式简单地从字符串开头删除
+1
;这太过分了。在这种情况下,可以说:

if (phoneNumber && phoneNumber.indexOf('+1') === 0) {
    phoneNumber = phoneNumber.substring(2);
}
然而,解决国家代码问题的一般解决方案必须考虑在几个地方存在的所有已知的国家代码,包括。不过,它需要几行代码。您必须考虑以下事项:

  • 如果字符串以
    +1
    开头,则国家代码为1
  • 如果字符串以
    +2
    开头,则如果下一个字符是
    0
    7
    ,则为两位国家代码,否则,如果第二个字符是
    8
    ,则为错误,否则为三位代码
+
后面的第一个数字是3到9,也有类似的规则

在这一点上,正则表达式变成了一个有趣的,虽然看起来很疯狂的解决方案,但它有以下形式

^\+[1|2[07]|2[1-69]\d|  ..the rest of it goes here...  ]
一个相关的问题:

编辑


使一般问题变得困难的事情之一是,国家代码列表可能会扩大。目前,没有以28开头的国家/地区代码,但该组保留供将来扩展,因此如果分配了新代码,您的代码将不得不更改。完整的正则表达式确实很长,很难阅读,而且容易出错。某种带有函数的表驱动方法可能是最好的方法,但除非你从事电信业务,否则我认为你可以编写一个应用程序,使呼叫代码与号码保持不同。:)

由于国家代码是不同的(它们并不都是
+1
),我想说的是,最好的方法是删去后面有加号和数字的表达式

这应该做到:

.replace(/^\+[0-9]/, '');
测试:

"+12345".replace(/^\+[0-9]/, '');   // 2345
"+2345".replace(/^\+[0-9]/, '');    // 345

当然,如果您只想使用
+1
,只需将
[0-9]
替换为
1
,因为国家代码是不同的(它们并不都是
+1
),我认为最好的方法是删去带有加号和数字的表达式

这应该做到:

.replace(/^\+[0-9]/, '');
测试:

"+12345".replace(/^\+[0-9]/, '');   // 2345
"+2345".replace(/^\+[0-9]/, '');    // 345

当然,如果你只想使用
+1
,只要把
[0-9]
换成
1

就行了,如果你想用正则表达式(你不应该这么做,我写这篇文章只是为了让你,OP,能学一点正则表达式)的话,它应该是
。替换(/^\+1/,“”)
^
表示“字符串必须从这里开始”,
\+
是一个文本
+
1
是一个文本
1
。谢谢,这正是我想要的非常详细的答案。国家代码的复杂性并不像
+N
那么简单,如果你用正则表达式(你不应该这么做,我写这篇文章只是为了让你,OP,能学一点正则表达式)那么简单,它应该是
。替换(/^\+1/,“”)
^
表示“字符串必须从这里开始”,
\+
是一个文本
+
1
是一个文本
1
。谢谢,这正是我想要的非常详细的答案。国家代码的复杂性并不像
+N
那么简单一个修正:在开始时使用
^
,以确保匹配发生在开始时。大多数看起来实际长度超过一位数,因此这可能会使任何非北美/美国电话号码出现错误。@RyanKinal Good call,添加了^@ajp15243-好的观点,我不知道多位数代码。一个修正:在开始时使用
^
,以确保匹配在开始时发生。大多数看起来实际长度超过一位数,因此这可能会使任何非北美/美国电话号码出现错误。@RyanKinal Good call,添加了^@ajp15243-好的一点,我不知道多位数代码。