2008-11-03 18 views
13

Tengo un sistema que usa números de teléfono como identificadores únicos. Por esta razón, quiero formatear todos los números de teléfono a medida que ingresan usando un formato normalizado. Como no tengo control sobre mis datos de origen, necesito analizar estos números y formatearlos antes de agregarlos a mi base de datos.Normalización del número de teléfono: ¿alguna biblioteca preexistente?

Estoy a punto de escribir un analizador que pueda leer números de teléfono y sacar un formato de teléfono normalizado, pero antes de hacerlo me preguntaba si alguien sabía de alguna biblioteca preexistente que pudiera usar para formatear números de teléfono.

Si no hay bibliotecas preexistentes, ¿qué cosas debo tener en cuenta al crear esta característica que puede no ser obvia?

Aunque mi sistema solo se ocupa de números de EE. UU. En este momento, planeo intentar incluir compatibilidad con números internacionales por si acaso, ya que existe la posibilidad de que sea necesario.

Editar Olvidé mencionar que estoy usando C# .NET 2.0.

+0

@Dan, creo que obtendrías una mejor respuesta si nos dices _qué idioma_ estás usando. :-) –

+0

Agregué la etiqueta C# 2.0 a esta pregunta. –

+0

@Joel, no quiero comenzar una guerra de edición pero etiqueté la pregunta con C# 2.0 por una razón (creo) válida: http://stackoverflow.com/questions/247621/what-are-the -corregir-versión-números-para-c –

Respuesta

1

Sólo tira a cualquier no-dígitos, posiblemente usando una expresión regular: [^\d]

La única excepción podría ser si se quiere manejar las extensiones, para distinguir un número sin un código de área, pero con una extensión de 3 dígitos, o si necesita manejar números internacionales.

5

Actualmente estoy involucrado en el proyecto OpenMoko, que está desarrollando un teléfono celular completamente abierto (incluido el hardware). Ha habido muchos problemas con la normalización de los números telefónicos. No sé si alguien ha encontrado una buena solución todavía. El mayor problema parece ser con los números de teléfono de los EE. UU., Ya que a veces vienen con un 1 en el frente y otras no. Dependiendo de lo que haya almacenado en su lista de contactos, puede o no mostrar correctamente la información de identificación de la persona que llama. Recomiendo quitar el 1 en el número de teléfono (aunque esperaría que la mayoría de la gente no ingresara en primer lugar). Es posible que también deba buscar un signo más o un código de país en el frente de números internacionales.

Puede consultar el sitio web de OpenMoko, la lista de correo y el control de código fuente para ver si ya han resuelto este error.

11

Usted podría utilizar libphonenumber de Google. Aquí hay una entrada en el blog:

http://blog.appharbor.com/2012/02/03/net-phone-number-validation-with-google-libphonenumber

números de análisis sintáctico es tan fácil como instalar el NuGet package y luego hacer esto:

var util = PhoneNumberUtil.GetInstance(); 
var number = util.Parse("555-555-5555", "US"); 

apto para procesar el número de la siguiente manera:

util.Format(number, PhoneNumberFormat.E164); 

libphonenumber admite varios formatos distintos de E.164.

+0

Esta biblioteca es increíble. Gran sugerencia – Junto

0

Lo que necesita es una lista de todos los códigos de país y comienza a hacer coincidir sus primeros caracteres de cadena con la lista de códigos de país para asegurarse de que sea correcta y el resto del número, asegúrese de que todos los dígitos varía de 5-10 dígitos

Para lograr la verificación de códigos de país, instale NGeoNames nuget que usa el sitio web www.geonames.org para obtener una lista de todos los códigos de país que se usarán para hacer coincidir con ellos.

Cuestiones relacionadas