簡體   English   中英

德國電話號碼格式的正則表達式

[英]Regexp for german phone number format

我嘗試從德語格式的字符串中獲取電話號碼。 但我沒有讓它全面運行。 輸入文本是一個包含大量內容的完整 HTML 頁面,而不僅僅是數字。

可能的格式:

(06442) 3933023     
(02852) 5996-0       
(042) 1818 87 9919   
06442 / 3893023  
06442 / 38 93 02 3     
06442/3839023
042/ 88 17 890 0     
+49 221 549144 – 79  
+49 221 - 542194 79  
+49 (221) - 542944 79
0 52 22 - 9 50 93 10 
+49(0)121-79536 - 77 
+49(0)2221-39938-113 
+49 (0) 1739 906-44  
+49 (173) 1799 806-44
0173173990644
0214154914479
02141 54 91 44 79
01517953677
+491517953677
015777953677
02162 - 54 91 44 79
(02162) 54 91 44 79

我試過了:

$regex =  '~(?:\+?49|0)(?:\s*\d{3}){2}\s*\d{4,10}~';
if(preg_match_all($regex, $input_imprint , $matches)){
    print_r($matches);
}

但它不只匹配幾種格式。 我不知道這樣做。

這是一個匹配所有格式的正則表達式。 我建議然后替換所有不需要的字符,你得到了你想要的結果。

(\(?([\d \-\)\–\+\/\(]+)\)?([ .\-–\/]?)([\d]+))

如果您需要最小長度來匹配您的數字,請使用以下命令:

(\(?([\d \-\)\–\+\/\(]+){6,}\)?([ .\-–\/]?)([\d]+))

https://regex101.com/r/CAVex8/143

更新,感謝@Willi Mentzel 的建議

[0-9]*\/*(\+49)*[ ]*(\([0-9]+\))*([ ]*(-|–)*[ ]*[0-9]+)*

檢查此鏈接: https : //regex101.com/r/CAVex8/1

可能會引入一些誤報。

這個解決了我的問題(從電子郵件中提取電話號碼):

r"\\+?[0-9]+([0-9]|\\/|\\(|\\)|\\-| ){10,}"

前面可選的加號,后跟至少 1 個數字,后跟至少 10 個數字或分隔字符,例如/()-或空格。 (電話號碼沒有官方的“最小位數”,但我認為它們的長度至少為 11 位數)

我添加這個是因為 @Kakul 的解決方案匹配我文本的任何留置權,並且使用 @despecial 的我的代碼不會終止。 (我猜這對我的電腦來說計算成本太高了)

這不是所問問題的解決方案,只是匹配電話號碼的建議!

如果您是第一次存儲電話號碼,請限制不同可接受格式的數量。 擺脫這些例如:

(06442) 3933023
042/ 88 17 890 0
+49(0)121-79536 - 77
02162 - 54 91 44 79

為什么? 您需要測試更多可能的輸入無效值的方法。

根據DIN 5008,您絕對需要考慮的那些格式:

0873 376461
03748 37682358
05444 347687-350
0764 812632-41
0180 2 12334
0800 5 23234213
+49 30 3432622-113
0179 1111111

這是我想出的:正則表達式

^(([+]{1}[1-9]{1}[0-9]{0,2}[ ]{1}([1-9]{1}[0-9]{1,4}){1}[ ]{1}([1-9]{1}[0-9]{2,6}){1}([ -][0-9]{1,5})?)|([0]{1}[1-9]{1}[0-9]{1,4}[ ]{1}[0-9]{1,8}([ -][0-9]{1,8})?)?)

正面:

06429 1111
06901 306180
06429 231
0800 3301000
0179 1111111
0873 376461
03748 37682358
05444 347687-350
0764 812632-41
0180 2 12334
0800 5 23234213
+49 6429 1111
+49 39857 2530
+55 11 2666-0054
+300 11 2666-0054
+49 641 20106 0
+49 641 20106
+49 30 3432622-113

否定:

++49 157 184977
+300 11 0000-0000
(06442) 3933023
(02852) 5996-0
(042) 1818 87 9919
06442 / 3893023
06442 / 38 93 02 3
06442/3839023
042/ 88 17 890 0
+49 221 - 542194 79
+49 (221) - 542944 79
0 52 22 - 9 50 93 10
+49(0)121-79536 - 77
+49(0)2221-39938-113
+49 (0) 1739 906-44
+49 (173) 1799 806-44
0173173990644
0214154914479
01517953677
+491517953677
015777953677
02162 - 54 91 44 79
(02162) 54 91 44 79
saddsadasdasd
asdasd
asdasd asdasd asd
asdasd
kjn asohas  asdoiasd
23434 234 234 23
323
23434 234----234
///// ----
// id8834 3493934 //

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM