JavaScript phone 号码的正则表达式不匹配

JavaScript regexp for phone number does not match

我想就以下问题寻求帮助:

我有以下正则表达式:

var r = /^(\+455\ )(\d{3})(\d{1,3})(\d{1,3})$/

我想用这个正则表达式来替换数字并用空格分隔这个数字,例如:“+455 123 123 123”。

我原以为上面的正则表达式会完成以下工作:当我有“+455”和 4 位数字时,它会 return 是这样的: “+455 123 1”,但它只适用于第二组的第 5 位数字,输出如下:

'+455 1111'.replace(r," "); 是 return 这个:'+455 1111'(我预计 +455 111 1

'+455 11121'.replace(r," ");是return这个:'+455 111 2 1'(我预计+455 111 21

任何人都可以帮忙告诉我,我在声明正则表达式时哪里做错了吗?或其他任何地方...

提前谢谢你。

兄弟们, 汤姆

正如评论中所说。您可以将最后一组设置为可选,以避免它匹配您希望放入第二组的数字。

经过一些更正,您可以使用此正则表达式:^(\+455)\ ?(\d{3})\ ?(\d{1,3})?\ ?(\d{1,3})?
在更改中,我在每个组之间添加了一个非强制性 space,我已将 space 从第一组中移出,以便在每个组中做同样的事情。所以现在你应该这样做:

let regex = /^(\+455)\ ?(\d{3})\ ?(\d{1,3})?\ ?(\d{1,3})?$/;
console.log("+455111222333".replace(regex, "   "));
console.log("+455111".replace(regex, "   "));
console.log("+45511122".replace(regex, "   "));
console.log("+4551112223".replace(regex, "   "));
console.log("+455111 22".replace(regex, "   "));
console.log("+455111 22".replace(regex, "   "));
console.log("+455123 12345".replace(regex, "   "));

由于量词中的 {1,3},模式 ^(\+455 )(\d{3})(\d{1,3})(\d{1,3})$ 匹配至少 5 个数字。

如果您将最后一组设置为可选,则第 4 组中第 7-9 位的第 3 组可以匹配

您也可以省略 space 前的反斜杠 \

^(\+455\ )(\d{3})(\d{1,3})(\d{1,3})?$

Regex demo

const regex = /^(\+455 )(\d{3})(\d{1,3})(\d{1,3})?$/;
[
  "+455 123123123",
  "+455 1111",
  "+455 11121"
].forEach(s =>
  console.log(s.replace(regex, "  "))
);