regex 德语电话号码格式的正则表达式

zbq4xfa0  于 2022-11-18  发布在  其他
关注(0)|答案(5)|浏览(183)

我试着从字符串中得到德语格式的电话号码。但是我没有完全运行。输入的文本是一个完整的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);
}

但它不匹配只有几个格式,我没有想法去做。

mcdcgff0

mcdcgff01#

这里有一个正则表达式来匹配你所有的格式。我会建议然后取代所有不需要的字符,你得到你想要的结果。

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

如果您需要最小长度来匹配您的编号,请使用以下命令:

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

https://regex101.com/r/CAVex8/143
更新,谢谢你的建议@Willi Mentzel

fivyi3re

fivyi3re2#

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

检查此链接:https://regex101.com/r/CAVex8/1
可能会引入一些误报。

vmpqdwk3

vmpqdwk33#

这个解决了我的问题(从电子邮件中提取电话号码):
r"\+?[0-9]+([0-9]|\/|\(|\)|\-| ){10,}"
前面可以有一个加号,后面至少有一个数字,后面至少有10个数字或分隔字符,如/()-或一个空格。(电话号码没有官方的“最小位数”,但我假设它们都至少有11位)
我添加这个是因为@Kakul的解决方案匹配我的文本的任何留置权,并且使用@ desspecial的代码不会终止。(我猜它对我的PC来说计算成本太高了)

f0brbegy

f0brbegy4#

嘿,我有一个小的增强desspecial的正则表达式:

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

它会筛选出/出现频率过高的数字

h43kikqp

h43kikqp5#

这不是所问问题的解决方案,只是匹配电话号码的建议!

如果您是第一次储存电话号码,请限制可接受的不同格式的数量。例如:

(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

下面是我的想法:Regex

^(([+]{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 //

相关问题