正则表达式:
^(\(?([\d \-\)\–\+\/\(.]+){8}\)?([ .\-–\/]?)([\d]+))$
目标:
基于https://regexpattern.com/phone-number/,这是我改编的德语正则表达式:
匹配这些数字:(在 https://regex101.com/r/BwjY50/1 和 https://ihateregex.io/expr/
进行测试)US (North American) Phone Numbers
1-800-123-4567
(123)456-7890
1234567890
123-456-7890
123.456.7890
123 456 7890
(123) 456 7890
UK Phone Numbers
+447222555555
+44 7222 555 555
(0722) 5555555 #2222(no match)
French Phone Numbers
0123456789
01 23 45 67 89
01.23.45.67.89
0123 45.67.89
0033 123-456-789
+33-1.23.45.67.89
+33 – 123 456 789
+33(0) 123 456 789
+33 (0)123 45 67 89
+33 (0)1 2345-6789
+33(0) – 123456789
German Phone Numbers
(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
0214154914479
02141 54 91 44 79
01517953677
+491517953677
015777953677
02162 – 54 91 44 79
(02162) 54 91 44 79
Chinese Phone Numbers
0936-4211235
89076543
010-12345678-1234
Chinese Mobile Phone Numbers
008618311006933
+8617888829981
1911925564
India Phone Numbers
03595-259506
03592 245902
03598245785
9775876662
0 9754845789
0-9778545896
+91 9456211568
91 9857842356
919578965389
Brazilian Phone Numbers
(12) 123 1234
(01512) 123 1234
(0xx12) 1234 1234
Australian Phone Numbers
0732105432
1300333444
6 digits really? minimum requirred in this regex is currently set with {8}
131313(no match)
Dutch Phone Numbers
+31235256677
+31(0)235256677
023-5256677
Sweden Phone Numbers
+46 8 123 456 78
08-123 456 78
0123-456 78
有效!寻找缺陷或有效的不受支持的数字。
您的解决方案对于简单情况来说足够好,但在许多边缘情况下却失败了。例如,有大量无效的电话号码通过检查,例如:
(022 23321
()23435 23
3352 +2 32324 2
您甚至可以解释其中的一些问题,例如括号平衡,但是想出一个正则表达式来解释所有可能的情况,我认为很困难,而且肯定会使其难以维护。
您可以考虑强迫用户至少“提示”您他们打算插入号码的国家/地区或格式,并使用此信息来匹配更简单、更“专业”的正则表达式。