JavaScript中的正则表达式,仅用于在字符串中掩码数字和特殊字符(/、空格、-)。

3

I have to write a regex where it will mask all the digit in a string.

Eg:

Input: 1234567890 expiry date is 1211    
Output: ********* expiry date is ****

or

Input: 1211 and number is 1234567890</p>    
Output: **** and number is *********

I am using:

var myregexp = /^(?:\D*\d){3,30}\D*$/g;<br/><br/>

whole string is getting masked using the above regex.


为什么不跳过正则表达式,使用简单的字符串替换呢? - Mirko Vukušić
@MirkoVukušić因为他不知道他想要改变的数字,所以他必须使用正则表达式。 - Zooly
1
@HugoTor,我的第一反应总是避免使用正则表达式(性能)如果有更快的方法。然而,在这种情况下不可能,正则表达式非常简单,有10个可能要替换的字符。循环比正则表达式慢约12%(在Chrome中),代码更多,可读性较差 :) https://jsbench.me/ylj1rxzao8/1 - Mirko Vukušić
1个回答

4

您实际使用的正则表达式无法给出预期结果,因为它匹配整个字符串,这就是为什么整个字符串被掩码的原因。

以下是您需要的内容:

var myregexp = /\d/g;

您只需要每次匹配\d并将其替换为*,可以在此工作演示中看到。

演示:

var str = "1234567890 expiry date is 1211";

var myregexp = /\d/g;

console.log(str.replace(/\d/g, "*"));

编辑:

如果您想匹配空格和特殊字符,例如_.,您可以使用以下正则表达式:

var myregexp = /[\d\._\s]/g;

\d 匹配任何十进制数字。相当于 [0-9]。这里获取您想要的最简单的方法。 - Zooly
@HugoTor 是的,确实。 - cнŝdk
@chsdk:它起作用了。如果我有1234.4567.7654.3456 exp 12 13,它只会掩盖数字而不是“.”或空格。期望的输出应该是******************* exp *****。 - Chanchal singh

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