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

Posted

技术标签:

【中文标题】电话号码的 JavaScript 正则表达式不匹配【英文标题】:JavaScript regexp for phone number does not match 【发布时间】:2022-01-03 14:22:01 【问题描述】:

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

我有以下正则表达式:

var r = /^(\+455\ )(\d3)(\d1,3)(\d1,3)$/

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

我期待,上面的正则表达式将完成以下工作:当我有“+455”和 4 位数字时,它会返回: "+455 123 1",但只能从第二组的第 5 位开始工作,输出如下:

'+455 1111'.replace(r,"$1$2 $3 $4"); 正在返回这个:'+455 1111'(我期望 +455 111 1

'+455 11121'.replace(r,"$1$2 $3 $4"); 正在返回这个:'+455 111 2 1'(我期望+455 111 21

谁能帮助请告诉我,我在声明正则表达式时哪里出错了?或其他任何地方...

提前谢谢你。

Brgds, 汤姆

【问题讨论】:

您可以将最后一组设为可选 ^(\+455 )(\d3)(\d1,3)(\d1,3)?$ regex101.com/r/FtYfs9/1 非常感谢您的帮助,它可以工作...它只是在替换值后添加空格,但可以使用修剪,'+455 111222'.replace(r,"$1$2 $3 $4").trim();,最后我发现,该解决方案还可以将正则表达式更新为^(\+455 )(\d3)(\d0,3)(\d0,3)?$ 也适用于修剪 【参考方案1】:

由于量词中的1,3,模式^(\+455 )(\d3)(\d1,3)(\d1,3)$ 至少匹配5 位数字。

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

在这部分\ \ 中也可以省略空格前的反斜杠

^(\+455\ )(\d3)(\d1,3)(\d1,3)?$

Regex demo

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

【讨论】:

【参考方案2】:

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

进行一些更正后,您可以使用此正则表达式:^(\+455)\ ?(\d3)\ ?(\d1,3)?\ ?(\d1,3)? 在更改中,我在每个组之间添加了一个非强制性空格,我已经将空间移出第一组,以便在每个组上制作相同的内容。所以现在你应该这样做:

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

【讨论】:

以上是关于电话号码的 JavaScript 正则表达式不匹配的主要内容,如果未能解决你的问题,请参考以下文章

在javascript中,我需要一个正则表达式来匹配电话号码中的平衡括号 /^([1]0,1)\s?\(?\d3\)?[-\s]?\d 3[-\s]?\d4$/

IFE_part2_JavaScript_正则表达式运用(判断邮箱/手机号码)

正则表达式匹配电话号码和手机号码

手机号码正则表达式验证

JavaScript学习笔记整理Day10

JavaScript----表单验证