2011-06-13 21 views
5

Necesito una expresión regular (para usar en un sitio web ASP .NET) para validar los números de teléfono. Su supone que deben ser flexibles y las únicas restricciones son:Expresión regular básica para un número de teléfono 'genérico'

  • debería haber al menos 9 dígitos
  • sin letras alfabéticas
  • puede incluir espacios, guiones, una sola (+)

I he buscado SO y Regexlib.com pero obtengo expresiones con más restricciones, por ejemplo telefónica Reino Unido o EE.UU. etc.

Respuesta

4

Lo mejor es pedir al usuario que rellene en su país, a continuación, aplicar una expresión regular para ese país. Cada país tiene su propio formato para números de teléfono.

+0

Exactamente a la derecha - no hay un estándar, por lo que es difícil proporcionar una expresión regular que coincida en todos los ámbitos sin que sea tan genérica que no pueda evitar entradas no válidas. – GalacticCowboy

+0

Yo quería un formato flexible. Aquí (SA) no hay un formato de teléfono estricto (por ejemplo, 0711231234, 071 123 1234, 071-123-1234, (071) 123 1234 son aceptables). Supongo que una caja de edición enmascarada es la mejor manera de avanzar. – robasta

+0

En ese caso, supongo que una expresión regular que aceptaría exactamente 10 dígitos y filtrada (,) y espacio en blanco sería suficiente. –

6

\+?[\d- ]{9,}

Este coincidirán con los números que comienzan con opcionalmente un plus y luego al menos nueve caracteres con los guiones y espacios.

Aunque esto significa que los guiones y espacios cuentan para los nueve caracteres. Me gustaría quitar los guiones y espacios y luego sólo tiene que utilizar

\+?[\d]{9,}

2

^[0-9- +] + $

<asp:RegularExpressionValidator runat="server" id="rgfvphone" controltovalidate="[control id]" validationexpression="^[0-9-+ ]+$" errormessage="Please enter valid phone!" /> 
18
^\s*\+?\s*([0-9][\s-]*){9,}$ 

Descomponerlo:

^   # Start of the string 
    \s*  # Ignore leading whitespace 
    \+?  # An optional plus 
    \s*  # followed by an optional space or multiple spaces 
    (
    [0-9] # A digit 
    [\s-]* # followed by an optional space or dash or more than one of those 
) 
    {9,}  # That appears nine or more times 
$   # End of the string 

Prefiero escribir expresiones regulares de la última manera, porque es más fácil de leer y modificar en el futuro; la mayoría de los idiomas tienen una bandera que debe establecerse para eso, p. RegexOptions.IgnorePatternWhitespace en C#.

+0

Tenga en cuenta que este es un enfoque muy laxo; aceptaría números como '+ - 1 --- 2345 - - - 678 9 -', y solo verifica que haya un mínimo de nueve dígitos y que un signo más solo aparece al comienzo. Creo que eso es lo que querías sin embargo. – configurator

0
@"^(?:\+?1[-. ]?)?\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$" 

Esto es lo que uso. Esto manejará la validación del número de teléfono genérico para la mayoría de los casos.

0

Este es súper genérico, permitiendo solo los caracteres que espera en un número de teléfono dado, incluyendo #. Ignora cualquier patrón de formato.

@"^([\(\)\+0-9\s\-\#]+)$" 
Cuestiones relacionadas