【问题标题】:Java string replace regex for invalid characters in a phone numberJava字符串替换电话号码中无效字符的正则表达式
【发布时间】:2016-12-12 16:27:35
【问题描述】:

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

电话号码示例:

  • +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]", "");

【问题讨论】:

  • 您当前的正则表达式如何失败?难道那些 outer [..] 没有明显的用途吗? (如果 Java 的正则表达式与常规正则表达式类似,它们会将 所有内容 放在“一个字符”集中。)
  • 我会使用.replaceAll("^(\\+)|\\D+", "$1")

标签: java regex phone-number


【解决方案1】:

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

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

在您当前的正则表达式中,[/(?&lt;!^)\+|[^\d+] 只是一个字符类(因此它匹配单个字符,+ 使其重复该字符类,然后您的模式匹配 literal @ 987654329@ 字符串。所以,语法错误。

【讨论】:

    【解决方案2】:

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

    ^(\+)|\D+
    

    在 Java 中:

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

    图案细节:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多