Как я могу сравнить международные телефонные номера в Perl? - PullRequest
1 голос
/ 13 января 2010

Существуют ли модули, которые могут помочь мне сравнить номера телефонов на равенство?

Например, следующие три числа эквивалентны (при наборе номера из Великобритании)

+44 (0)181 1234123
00441811234123
0181 1234123

Есть ли модуль Perl, который может сказать мне это?

Ответы [ 2 ]

3 голосов
/ 13 января 2010

Самое близкое, что я вижу на CPAN , это Number :: Phone , который является активным проектом и поддерживает телефонные номера Великобритании. Это должно работать для конкретного примера, который вы приводите. Поддерживается несколько стран.

Если у вас есть номера телефонов для других стран, все может стать более сложным из-за особенностей форматирования на местном уровне.

2 голосов
/ 13 января 2010

Предположим, что необходимого вам кода не существует, и вы должны написать его самостоятельно. Необходимо выполнить две основные операции:

  1. Применить контекст.Здесь вы принимаете во внимание местоположение набираемого телефона.Если звонок не международный, вы указываете код страны;если вызов не междугородный, вы предоставляете код города и т. д. Это, конечно, требует некоторых правил для каждой локали.

  2. Нормализация.Удалите бессмысленные пробелы и знаки препинания, преобразуйте префикс международного набора («011» в NANPA, «00» в большинстве стран мира, но иногда и в более странных вещах) в стандарт «+».

После правильного выполнения этих двух шагов все входные данные, которые фактически являются эквивалентными числами, должны давать идентичные выходные строки.

...