Así que estoy diseñando una página web que se utilizará para usuarios globales, que incluye usuarios de Canadá, EE. UU., India, Reino Unido, etc. Necesito aplicar validaciones para este campo de número de teléfono, pero no estoy seguro de la mejor manera de hacerlo. .
Algunos de los formatos válidos que se me ocurren son:
- 1800123456 (India)
- uso de "-" en números de teléfono de EE. UU.
Estoy un poco confundido acerca de qué caracteres especiales debo permitir que un usuario ingrese (por ejemplo - / ()
). ¿Cómo han resuelto esto otros en el pasado?
javascript
validation
internationalization
guardabosque
fuente
fuente
Respuestas:
El hecho de que pueda restringir algo (eso es lo que le pagan, como programador, para escribir código), eso no significa que realmente deba hacer esto.
¿Cuál es el punto de validar un número? ¿Por qué es útil? ¿Fallará si un usuario ingresa "0800DIALTHIS", o "私 は 電話 番号 を 持 っ て い な い", o "(499) 123-45-67 добавочный 4425"? Seguramente lo hará (usted dice "global". ¿No?), Mientras que los usuarios solo querían transmitirle una información importante sobre cómo contactarlos por teléfono.
Además, la forma en que se almacenan los datos debe regirse por la forma en que se usan. ¿Cómo usarás los números? ¿Se utilizarán para enviar automáticamente mensajes SMS no deseados o los gerentes los marcarán manualmente? Si es lo último, entonces está bien permitir caracteres adicionales, ya que el cerebro humano podrá analizarlos de la manera que considere más apropiada; y en este caso, realmente no necesita ninguna validación, lo que molestará a los usuarios humanos.
fuente
Sería muy difícil saber si un número es válido o no, ya que diferentes países tienen diferentes formatos. En Francia, por ejemplo, 06 12 34 56 78 es un número de teléfono válido, mientras que 00 12 34 56 78 no lo es, ya que el número solo puede comenzar de 01 a 09, 06 y 07 en teléfonos móviles.
Además, los números de teléfono se pueden escribir en varios formatos, incluso en el mismo país. He visto:
Los dos últimos son la forma internacional.
En general:
+
símbolo solo como personaje principal, guiones, puntos, comas y espacios.No se recomienda profundizar demasiado en la validación por países. No solo hay una gran cantidad de reglas, sino que también cambian las reglas. Por ejemplo, en Francia, hace unos años no había números de teléfono a partir del 07 o 09. Con el creciente número de teléfonos móviles aparecieron 07. Con los servicios de VoIP aparecieron 09.
También puede tener en cuenta números especiales. Por ejemplo, 3635 es un número válido en Francia, incluso si contiene solo cuatro dígitos y comienza con un valor distinto de cero.
fuente
+31 (0)30 1234567
donde 31 es Holanda, 030 es el código de área y 1234567 es el suscriptor.NO restrinja los caracteres; toma todo lo que te da. Pero cuando lo marque, tome solo los dígitos. Incluso entonces podría funcionar mal. Estuve en Tailandia un año antes de saber que 123-4567-9 no significaba una extensión, sino un rango de números, 1234567 a 1234569. Cuando marqué "12345679" funcionó, porque la compañía telefónica ignoró el dígito extra. Tome cualquier cosa, marque solo dígitos.
Me encanta que mi nuevo teléfono permita espacios en el número de teléfono. Puedo ingresar "123 456 7890" así como así, no todos juntos.
fuente
Soportes, tablero y espacio.
Una vez que el usuario ha ingresado el número de teléfono que contiene esos símbolos, puede validarlos de acuerdo con las reglas específicas del país (que deberá recopilar esas reglas para cada país), y luego los no dígitos pueden eliminarse cuando se procesa internamente en su software.
Esto se debe a que la IDD (marcación directa internacional) hace que sea imposible requerir que se utilicen realmente "caracteres especiales" para marcar un número, con la excepción de pausas al marcar los dígitos.
(No tengo conocimiento de esto en absoluto; corríjame si me equivoco).
fuente
Lo único que debe validarse es la cantidad de dígitos: ¿coincide con lo que necesitaría llamar?
Los códigos de acceso pueden / no deben ser permitidos por un usuario (es decir, +1 para los EE. UU.). Te diré por qué: si es un estadounidense que ingresa y no es tan inteligente, probablemente querrá ingresar 001 en lugar de 1. La razón es que 00 es cómo se accede a un número internacional desde los EE. UU. No saben cuál es la diferencia entre eso y solo +1. Si llama a líneas fijas entre códigos de área (y a veces en el mismo código de área), también ingresará un 1 antes de ese número. Justo como Japón.
Toma Japón Se accede a las líneas terrestres provinciales con un 0 en el frente de ellas. Pero si está marcando desde fuera de Japón, no necesita ese 0.
Los números de teléfono móvil en China son 10 dígitos y en Hong Kong son 8. Si su formulario captura el país, ni siquiera pida el código del país al comienzo del número, solo muéstrelo automáticamente en texto de solo lectura justo al lado de el número que necesitan ingresar
La lista continua.
Simplemente valide el número de dígitos (asegúrese de que no se acepten letras) y facilite que un usuario final ingrese el número correcto de dígitos. Es decir, no deberían tener que ingresar el código de país y si su formulario es súper inteligente, es posible que ni siquiera necesiten ingresar el código de área si es un número de teléfono fijo. O si comienzan a ingresar cosas como un código de acceso, como 0 delante de un número japonés, solo hágales saber que no es necesario.
Todos los demás personajes, además de los dígitos, deberían ser un punto discutible: no tienen la oportunidad de ingresarlos.
fuente
Google tiene lib para esto:
https://github.com/googlei18n/libphonenumber
Hace el mejor esfuerzo, creo que debe haber casos que no se manejan, ya que de ninguna manera es una tarea fácil. Permita que los usuarios ingresen números y letras, luego elimine las letras con el código.
fuente