电话号码的 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$/