Java字符串替换电话号码中无效字符的正则表达式

时间:2016-08-06 10:08:21

标签: java regex phone-number

我试图写一个正则表达式来替换电话号码中的所有无效字符:

电话号码示例:

  • +36 00 211 1111 - > 36002111111
  • +49 03 691 4193 - > 49036914193
  • +36 00 211 1111 - > 36002111111
  • 06 78 90 12 34 - > 0678901234

正则表达式应该允许" +"只有当它是字符串中的第一个字符且其余只有数字类型[0-9]

时才签名

这是我目前的正则表达式:

phone = phone.replaceAll("[/(?<!^)\+|[^\d+]+//g]", "");

2 个答案:

答案 0 :(得分:7)

使用这个:[^\d+]|(?!^)\+

phone = phone.replaceAll("[^\\d+]|(?!^)\\+", "");
  • [^\d+]匹配的字符不是数字或+
  • (?!^)\+匹配字符串开头+个字符

在你当前的正则表达式中,[/(?<!^)\+|[^\d+]只是一个字符类(因此它匹配单个字符,而+使它重复该字符类,然后你的模式匹配 literal < / em> //g] string。所以,语法错误。

答案 1 :(得分:2)

使用正则表达式无需任何外观即可实现结果。捕获字符串开头的加号,以便在替换模式中使用$1反向引用重新插入,并匹配所有非数字。

^(\+)|\D+

在Java中:

.replaceAll("^(\\+)|\\D+", "$1")

模式细节:

  • ^(\+) - 第1组在字符串开头捕获文字加号
  • \D+ - 除数字以外的一个或多个字符。