Tengo una cadena "1112224444 'es un número de teléfono. Quiero formatear como 111-222-4444 antes de almacenarlo en un archivo. Está en un registro de datos y preferiría poder hacerlo sin asignar un nuevo variable.
Yo estaba pensando:
String.Format("{0:###-###-####}", i["MyPhone"].ToString() );
pero eso no parece hacer el truco.
** ACTUALIZACIÓN **
Okay. Fui con esta solución
Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")
Ahora se estropea cuando la extensión tiene menos de 4 dígitos. Completará los números de la derecha. entonces
1112224444 333 becomes
11-221-244 3334
¿Algunas ideas?
c#
string
formatting
phone-number
Brian G
fuente
fuente
Respuestas:
Tenga en cuenta que esta respuesta funciona con tipos de datos numéricos (int, long). Si está comenzando con una cadena, primero deberá convertirla en un número. Además, tenga en cuenta que deberá validar que la cadena inicial tiene al menos 10 caracteres de longitud.
De una buena página llena de ejemplos:
Aunque una expresión regular puede funcionar aún mejor, tenga en cuenta la antigua cita de programación:
fuente
Prefiero usar expresiones regulares:
fuente
// Remove non-digit characters var phoneDigits = Regex.Replace(crewMember.CellPhone, "[^\\d]", string.Empty); // Format the digits var phone = Regex.Replace(phoneDigits, @"(\d{1,3})(\d{0,3})(\d{0,4})", " ($1) $2-$3");
Tendrás que dividirlo en subcadenas. Si bien podría hacerlo sin ninguna variable adicional, no sería particularmente agradable. Aquí hay una posible solución:
fuente
if (phone.Length == 10)
condición.Sugiero esto como una solución limpia para los números de EE. UU.
fuente
Por lo que sé, no puedes hacer esto con string.Format ... tendrías que manejar esto tú mismo. Simplemente puede quitar todos los caracteres no numéricos y luego hacer algo como:
Esto supone que los datos se han ingresado correctamente, que podría usar expresiones regulares para validar.
fuente
Esto debería funcionar:
O en su caso:
fuente
Si puede obtenerlo
i["MyPhone"]
comolong
, puede usar ellong.ToString()
método para formatearlo:Vea la página de MSDN en cadenas de formato numérico .
Tenga cuidado de usar long en lugar de int: int podría desbordarse.
fuente
2125551-212-1234.
fuente
Si busca un número de teléfono (de EE. UU.) Para convertir en tiempo real. Sugiero usar esta extensión. Este método funciona perfectamente sin completar los números al revés. La
String.Format
solución parece funcionar al revés. Simplemente aplique esta extensión a su cadena.fuente
También puedes probar esto:
Salida:
fuente
Es posible que te encuentres en la situación en la que tienes usuarios que intentan ingresar números de teléfono con todo tipo de separadores entre el código de área y el bloque de números principal (por ejemplo, espacios, guiones, puntos, etc.) Así que querrás pele la entrada de todos los caracteres que no son números para que pueda esterilizar la entrada con la que está trabajando. La forma más fácil de hacer esto es con una expresión RegEx.
Entonces, la respuesta que ha enumerado debería funcionar en la mayoría de los casos.
Para responder lo que tiene sobre su problema de extensión, puede quitar cualquier cosa que sea más larga que la longitud esperada de diez (para un número de teléfono normal) y agregarlo al final usando
Deberá hacer una verificación 'si' para determinar si la longitud de su entrada es mayor a 10 antes de hacer esto, si no, simplemente use:
fuente
fuente
fuente
Prueba esto
Salud.
fuente
Use Match en Regex para dividir, luego envíe una cadena formateada con match.groups
fuente
Lo siguiente funcionará sin usar expresiones regulares
Si no usamos long.Parse, el string.format no funcionará.
fuente
La salida será: 001-568-895623
fuente
Utilice el siguiente enlace para C # http://www.beansoftware.com/NET-Tutorials/format-string-phone-number.aspx
La forma más fácil de formatear es usar Regex.
Pase su número de teléfono como cadena 2021231234 hasta 15 caracteres.
Otro enfoque sería usar Substring
fuente
Para solucionar su problema de extensión, ¿qué tal si:
fuente
No para resucitar una vieja pregunta, pero pensé que podría ofrecer al menos un método un poco más fácil de usar, si es una configuración un poco más complicada.
Entonces, si creamos un nuevo formateador personalizado, podemos usar el formato más simple
string.Format
sin tener que convertir nuestro número de teléfono along
Entonces, primero creemos el formateador personalizado:
Entonces, si quieres usar esto, harías algo así:
Algunas otras cosas para pensar:
En este momento, si especificó un formateador más largo de lo que hizo una cadena para formatearlo, simplemente ignorará los signos # adicionales. Por ejemplo esto
String.Format(new NumericStringFormatter(),"{0:###-###-####}", "12345");
daría como resultado 123-45, por lo que es posible que desee que tome algún tipo de posible carácter de relleno en el constructor.Además, no proporcioné una forma de escapar de un signo #, por lo que si quisiera incluir eso en su cadena de salida, no podría hacerlo como está ahora.
La razón por la que prefiero este método sobre Regex es que a menudo tengo requisitos para permitir que los usuarios especifiquen el formato ellos mismos y es mucho más fácil para mí explicar cómo usar este formato que tratar de enseñarle a un usuario regex.
Además, el nombre de la clase es un poco inapropiado ya que en realidad funciona para formatear cualquier cadena siempre que desee mantenerla en el mismo orden y solo inyectar caracteres dentro de ella.
fuente
Puede probar {0: (000) 000 - ####} si su número objetivo comienza con 0.
fuente
Aquí hay otra forma de hacerlo.
fuente