从电话号码中删除括号,短划线和空格

我有一个电话号码,如(123)456-7890。 我正在使用replaceAll方法从字符串中删除()-以及空格。 我试过跟随

 String phNo= "(123) 456-7890".replaceAll("[()-\\s]").trim(); 

但它不起作用。 有解决方案吗

这应该工作:

 String phNo = "(123) 456-7890".replaceAll("[()\\s-]+", ""); 

在你的正则表达式:

  • \s应该是\\s
  • 连字符应该是字符类中的第一个或最后一个,以避免转义或将其用作\\-
  • [()\\s-]+使用量词+ ,通过最小化替换次数来提高效率

如果您需要电话号码,请使用:

 String phNo = "(123) 456-7890".replaceAll("\\D+", ""); 

此正则表达式将标记所有不是数字的字符,并将其替换为空字符串。


正则表达式: \D+

  • 匹配不是数字的单个字符。 \D
    • 在一次和无限次之间,尽可能多次。 +

括号[]-字符表示字符范围,例如[az] 。 但是,字符范围在此处不起作用,您需要使用文字。 逃避它。

 String phNo = "(123) 456-7890".replaceAll("[()\\-\\s]", "").trim()); 

这有两个主要原因不能按预期工作。

  1. 在字符类中,连字符具有特殊含义 。 您可以将连字符作为类的第一个或最后一个字符。 在一些正则表达式实现中,您也可以直接放在一个范围之后。 如果您将连字符放在任何其他位置,您需要将其转义为将其添加到您的class级。

     String phNo = "(123) 456-7890".replaceAll("[()\\-\\s]").trim(); ^^ 
  2. 您没有提供任何答案都未指明的替换值。

     String phNo = "(123) 456-7890".replaceAll("[()\\-\\s]", "").trim(); ^^ 

    最后,你也可以在这里删除.trim()

     String phNo = "(123) 456-7890".replaceAll("[()\\-\\s]", ""); 
  String newStr = phoneNumber.replaceAll("[^0-9]", ""); System.out.println(newStr); 

删除所有非数字字符。

Java Regex – 教程

如果你使用的是Kotlin

mobileNo.replace(Regex("[()\\-\\s]"), "")