2013-06-05 39 views
-1

給出一個包含空格和+的允許電話號碼,如何對正則表達式進行格式化以便刪除非數字和額外空格?REGEX在java中格式化電話號碼

我有這個迄今爲止

String num = "  Ken's Phone is + 123 2213 123 (night time)"; 
System.out.println(num.replaceAll("[^\\d|+|\\s]", "").replaceAll("\\s\\s+", " ").replaceAll("\\+ ", "\\+").trim()); 

你將簡化它,以便得到相同的結果?

謝謝

回答

1

可以簡化爲:

num.replaceAll("[^\\d+\\s]", "") // [^\\d|+|\\s] => [^\\d+\\s] 
    .replaceAll("\\s{2,}", " ") // \\s\\s+  => \\s{2,} 
    .replaceAll("\\+\\s", "+")  // \\+   => + 
    .trim() 
+0

這將刪除組之間的空間。 – Djon

+0

OP只需要**多餘的空格被刪除,而不是所有的空格和+「帶空格和+允許」,你是否運行他的代碼? – Djon

+0

@Djon:修正了這個問題 – mvp

1

我會把trim()第一,或更換至少每前多個空格。

另外請記住,\s表示空格:[\ t \ n \ x0B \ f \ r],如果您只是表示''然後使用它。

一個更好的方式來表達,你只需要至少兩個空格來代替將是

replaceAll("\\s{2,}", " ") 
1

首先提取數與-空間部分,然後壓縮多個空格單個空格。然後最後刪除加號後面的所有空格:

String numberWithSpaces = str.replaceAll("^[^\\d+]*([+\\d\\s]+)[^\\d]*$", "$1").replaceAll("\\s+", " ").replaceAll("\\+\\s*", "+"); 

我測試了這段代碼,它工作正常。

+0

這個刪除了+。 – Djon

+0

@Djon謝謝 - 我沒有注意到,修正(我認爲) – Bohemian

+0

@Djon現在確實修復 - 我只是編輯它 – Bohemian