正则表达式用于Java中的电话号码屏蔽

时间:2018-02-07 06:56:47

标签: java regex

我需要屏蔽电话号码

90 533 619 11 21
像这样

5**6**1*2*

首先我检查它是否包含90(国家/地区代码)并将其删除

if (number.length() > 2 && number.substring(0,2).contains("90")){
            number = number.replaceAll(number.substring(0,2), "");
        }

然后我删除了所有空格,但我被困在正则表达式部分。

number = number.replaceAll(" ", "").replaceAll("\\d(?=\\d{4})", "*");

4 个答案:

答案 0 :(得分:6)

我们可以在不使用任何捕获组的情况下解决此问题:

String input = "533 619 11 21";
input = input.replaceAll("(?<=\\d)\\d", "*").replaceAll(" ", "");
System.out.println(input);

5**6**1*2*

这里的替换逻辑是任何紧跟数字前面的单个数字都会被替换为星号。这当然是第一位数。

请注意,我认为您已经有一些方法可以删除国家/地区代码。

Demo

答案 1 :(得分:3)

\d(?<=\d{2})

Regex101 Demo

对于您的代码,请替换*:

之后的空格

number = number.replaceAll("\\d(?<=\\d{2})", "*").replaceAll(" ", "");

答案 2 :(得分:1)

我想这可能适合你:

^(?:90 *)?(\d)\d{2} *(\d)\d{2} *(\d)\d *(\d)\d$

替换为:

$1**$2**$3*$4*

说明:

Regex 101 Demo

示例Java源代码(run here):

final String regex = "^(?:90 *)?(\\d)\\d{2} *(\\d)\\d{2} *(\\d)\\d *(\\d)\\d$";
final String string = "90 533 619 11 21";
final String subst = "$1**$2**$3*$4*";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

final String result = matcher.replaceFirst(subst);
System.out.println(result);

答案 3 :(得分:1)

在已删除90的字符串上尝试此正则表达式:

(?<! |^)\d

并替换为*。这会产生5** 6** 1* 2*

这看起来落后并断言没有空格或字符串的开头,然后它匹配一个数字。

然后,您只需用空字符串替换所有空格即可获得5**6**1*2*