Какое регулярное выражение будет соответствовать действительным международным номерам телефона?

Я должен определить, действителен ли номер телефона прежде, чем попытаться набрать его. Телефонный звонок может пойти куда угодно в мире.

Какое регулярное выражение будет соответствовать действительным международным номерам телефона?

96
задан Abtin Forouzandeh 21 January 2010 в 23:57
поделиться

3 ответа

Вот «оптимизированная» версия вашего Regex:

^011(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
4[987654310]|3[9643210]|2[70]|7|1)\d{0,14}$

Вы можете заменить \ D с [0-9] , если ваш синтаксис Regeex не поддерживает \ D .

9
ответ дан 24 November 2019 в 05:33
поделиться

Все страны страны определяются МСЭ. Следующее Regeex основано на ITU-T E.164 и приложении к операционному бюллетению ITU № 930 - 15.IV.2009 . Он содержит все текущие коды страны и коды страны, зарезервированные для будущего использования. Хотя его можно немного сократить, я решил включить каждый код независимо.

Это для вызовов, исходящих из США. Для других стран замените Международный код доступа (011 в начале REGEX) с тем, что подходит для плана набора номера этой страны .

Также обратите внимание, что ITU E.164 определяет максимальную длину полного международного телефона номера до 15 цифр. Это означает, что трехзначный код страны приводит к допуску до 12 дополнительных цифр, а 1-значный код страны может содержать до 14 дополнительных цифр. Следовательно,

[0-9]{0,14}$

конец регеляции.

Самое главное, что это Regex не означает, что номер действителен - каждая страна определяет свой собственный внутренний план нумерации. Это только гарантирует, что код страны действителен.

^ 011 (999 | 998 | 997 | 996 | 995 | 994 | 993 | 992 | 991 | 990 | 979 | 978 | 977 | 976 | 975 | 974 | 973 | 972 | 971 | 970 | 969 | 968 | 967 | 966 | 965 | 964 | 963 | 962 | 961 | 960 | 899 | 898 | 897 | 896 | 895 | 894 | 893 | 892 | 891 | 890 | 889 | 888 | 887 | 886 | 885 | 884 | 883 | 882 | 881 | 880 | 879 | 878 | 877 | 876 | 875 | 874 | 873 | 872 | 871 | 870 | 859 | 858 | 857 | 856 | 855 | 854 | 853 | 852 | 851 | 850 | 839 | 838 | 837 | 836 | 835 | 834 | 833 | 832 | 831 | 830 | 809 | 808 | 807 | 806 | 805 | 804 | 803 | 802 | 801 | 800 | 699 | 698 | 697 | 696 | 695 | 694 | 693 | 692 | 691 | 690 | 689 | 688 | 687 | 686 | 685 | 684 | 683 | 682 | 681 | 680 | 679 | 678 | 677 | 676 | 675 | 674 | 673 | 672 | 671 | 670 | 599 | 598 | 597 | 596 | 595 | 594 | 593 | 592 | 591 | 590 | 509 | 508 | 507 | 506 | 505 | 504 | 503 | 502 | 501 | 500 | 429 | 428 | 427 | 426 | 425 | 424 | 423 | 422 | 421 | 420 | 389 | 388 | 387 | 386 | 385 | 384 | 383 | 382 | 381 | 380 | 379 | 378 | 377 | 376 | 375 | 374 | 373 | 372 | 371 | 370 | 359 | 358 | 357 | 356 | 355 | 354 | 353 | 352 | 351 | 350 | 299 | 298 | 297 | 296 | 295 | 294 | 293 | 292 | 291 | 290 | 289 | 288 | 287 | 286 | 285 | 284 | 283 | 282 | 281 | 280 | 269 | 268 | 267 | 266 | 265 | 264 | 263 | 262 | 261 | 260 | 259 | 258 | 257 | 256 | 255 | 254 | 253 | 252 | 251 | 250 | 249 | 248 | 247 | 246 | 245 | 244 | 243 | 242 | 241 | 240 | 239 | 238 | 237 | 236 | 235 | 234 | 233 | 232 | 231 | 230 | 229 | 228 | 227 | 226 | 225 | 224 | 223 | 222 | 221 | 220 | 219 | 218 | 217 | 216 | 215 | 214 | 213 | 212 | 211 | 210 | 98 | 95 | 94 | 93 | 92 | 91 | 90 | 86 | 84 | 82 | 81 | 66 | 65 | 64 | 63 | 62 | 61 | 60 | 58 | 57 | 56 | 55 | 54 | 53 | 52 | 51 | 49 | 48 | 47 | 46 | 45 | 44 | 43 | 41 | 40 | 39 | 36 | 34 | 33 | 32 | 31 | 30 | 27 | 20 | 7 | 1) [0-9] {0, 14} $

65
ответ дан 24 November 2019 в 05:33
поделиться

Международный план нумерации основан на плане нумерации МСЭ E.164 . Думаю, это и есть отправная точка вашего регулярного выражения.

Я обновлю его, если смогу создать регулярное выражение, основанное на нумерации ITU E.164.

0
ответ дан 24 November 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: