2017-01-08 1132 views
1

最近,我使用regexpal來構建這個自定義正則表達式。 我正在爲印度尼西亞的電話號碼使用幾個測試案例。如何爲複雜的印度尼西亞電話號碼格式構建正則表達式?

這裏簡單的一08xx-3456-789008xx34567890

一個例子,但它可以是一個有點混亂,如果我得到這個格式如下

here is my phone (08xx)34567890 
08xx.3456.7890 
08xx 3456 7890 
(+62) 8xx34567890 
(+62) 8xx-3456-7890 
+628xx34567890 
+62-8xx-3456-7890 
+628xx 3456 7890 

這裏是正則表達式我有(08|628|62)[\s\)\-]*(\s|(\d){3,}) ,但我可以做不包括所有這些樣本。

+62是國家代碼

能否請你幫我的任何解決方案,以驗證這些格式?

的電話號碼可能包含字符串,而不是隻是數字,因爲它是一句

+1

我不知道爲什麼那個傢伙投了票,沒有任何評論 – lloistborn

+0

建議:先將零件拆分成四個邏輯組,分別爲'(+62)','8xx','3456','7890 ',然後在將整個正則表達式模式放在一起之前單獨處理這些變體 –

+2

什麼是'x'?任何數字? '34567890'也是否有數字? –

回答

1

你可以嘗試用正則表達式[().- ]先刪除標記,並用空字符串替代的一部分。然後,您可以使用(?:\+62)?0?8\d{2}(\d{8})來匹配電話號碼。這匹配可選+62,可選0,8,兩位數字(xx)和電話號碼:8位數字。組1包含電話號碼。

+0

這可以是解決方案之一,但不是高效的方案之一。謝謝 – lloistborn

0

對於印度尼西亞的電話號碼,這大致應該工作。

(\()?(\+62|62|0)(\d{2,3})?\)?[ .-]?\d{2,4}[ .-]?\d{2,4}[ .-]?\d{2,4} 

要看到它在行動: https://regex101.com/r/qtEg6H/3

也看到在下面的評論的答案更有效的方式。

+0

您的比賽組正在改變每場比賽。 – sweaver2112

+0

對不起,我有點新正則表達式。你能詳細說明嗎? –

+1

如果您不關心比賽組,請使用'(?:...)':請參閱稍微更清晰的版本:'\(?(?:\ + 62 | 62 | 0)(?:\ d {2 ,3})?\)?[.-]?\ d {2,4} [.-]?\ d {2,4} [.-]?\ d {2,4}'https:// regex101 .com/r/qtEg6H/4 – sweaver2112