提问人:Karan Nayyar 提问时间:10/5/2023 更新时间:10/6/2023 访问量:91
每 3 位数字后屏蔽并插入连字符
Mask and insert hyphen after every 3 digits
问:
我正在尝试替换以下字符串,如下所示:
var phone = "9871234567"
result = xxx-xxx-4567
以下是我处理过的 js 代码,但这并没有给我正确的结果。
var lastphdigit = phone.replace(/\d(?=(?:\D*\d){4})/g, "x");
var lastphdighyp = lastphdigit.replace(/.{3}(?!$)/g, '$&-'); //xxx-xxx-456-7
答:
2赞
depperm
10/5/2023
#1
对于此问题,正则表达式不是必需的。使用会简单得多,只需获取最后 4 位数字即可slice
var phone = "9871234567"
console.log(`xxx-xxx-${phone.slice(6)}`)
评论
0赞
Cary Swoveland
10/6/2023
你的答案和威尔科的答案实际上是一样的(而且非常好),但因为你的答案是第一位的,所以你得到了我的赞成票。如果发布时间的差异足够小,我也会投票给 Wilco,但 SO 明智地不再提供低至秒的发布时间。现在,我看到两个答案都“4 小时前回答”。SO:我们不需要你缩短发布时间。
0赞
Karan Nayyar
10/12/2023
@depperm 如果有一些特殊字符,如括号、空格怎么办?例如,var phone = “9871234567)”,则结果为 xxx-xxx-567)。如果字符串末尾有一些乱码或括号、空格等,我们如何处理这种情况。我们只需要显示最后 4 位数字。
0赞
depperm
10/12/2023
@KaranNayyar这不是常见的电话号码格式。如果数字之间有破折号,这是行不通的,在这种情况下,我建议 Wilco 回答。无论哪种方式,正则表达式都不是必需的
3赞
Wilco
10/5/2023
#2
受到@depperm给出的评论的启发,为什么不尝试一下呢? 我们从电话号码中切掉 4 位数字,从末尾开始,然后将其附加到静态字符串中。
var phone = "9871234567";
var maskedPhone = "xxx-xxx-" + phone.slice(-4);
console.log(maskedPhone)
这样,如果电话号码中的数字数量是可变的,您仍将始终获得最后 4 位数字的屏蔽。 如果这是一个考虑因素,您还应该计算原始电话号码中的位数,并相应地添加 x。
2赞
The fourth bird
10/6/2023
#3
如果字符串中应该只有数字,并且您的 JavaScript 环境接受后视断言,则可以在左侧断言可选数字,匹配 3 位数字,同时在右侧断言 2 个或更多数字:
(?<=^\d*)\d{3}(?=\d{2,}$)
const phone = "9871234567"
const result = phone.replace(/(?<=^\d*)\d{3}(?=\d{2,}$)/g, "xxx-");
console.log(result);
如果始终有 10 位数字,则可以使用匹配项后跟捕获组,然后在替换中使用该捕获组。
^\d{6}(\d{4})$
const phone = "9871234567"
const result = phone.replace(/^\d{6}(\d{4})$/g, "xxx-xxx-$1");
console.log(result);
评论
.replace(/\d{3}(?!\d?$)/g, 'xxx-')
、regex101.com/r/XNMOer/1