使用 JavaScript 中的正则表达式隐藏电话号码

3
我的应用程序有一个特定的电话号码格式,看起来像 999.111.222,我在前端使用正则表达式模式来掩盖它:
/[0-9]{3}\.[0-9]{3}\.([0-9]{3})/

但最近,格式已更改,允许中间的三个数字少一个数字,因此现在999.11.222999.111.222都匹配。我该如何相应地更改我的正则表达式呢?
"999.111.222".replace(/[0-9]{3}\.[0-9]{3}\.([0-9]{3})/, '<div>xxx.xxx.$1</div>')

预期输出:

"999.111.222" // xxx.xxx.222
"999.11.222" // xxx.xx.222
3个回答

5

将 {3} 替换为 {2,3},以匹配两个或三个数字。

/[0-9]{3}\.[0-9]{2,3}\.([0-9]{3})/

参考见例如MDN


1
这并不能帮助楼主,因为第二部分(在点之间)需要用“x”掩盖。 - Wiktor Stribiżew

2

使用

console.log(
  "999.11.222".replace(/[0-9]{3}\.([0-9]{2,3})\.([0-9]{3})/, function ($0, $1, $2)
  { return '<div>xxx.' + $1.replace(/\d/g, 'x') + '.' + $2 + '</div>'; })
)

<最初的回答> 第一个捕获组([0-9]{2,3})将匹配2或3个数字,在替换参数中用作回调方法时,第一个组中的所有数字都将被替换为x
您还可以进一步自定义第一组数字的模式。

1
事实上,您不仅应更改正则表达式,还应更改回调替换函数:

const regex = /[0-9]{3}\.([0-9]{2,3})\.([0-9]{3})/;
const cbFn = (all, g1, g2) =>`<div>xxx.xx${(g1.length === 3 ? 'x' : '')}.${g2}</div>`;

const a = "999.11.222".replace(regex, cbFn);
const b = "999.111.222".replace(regex, cbFn);

console.log(a, b);

要更改正则表达式,您可以添加一个带有{2,3}量词的术语,并创建一个新的组。然后,在替换回调函数中,您可以使用长度来知道是否必须放置新的x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接