He intentado la siguiente expresión regular, pero parece que "[]" anidado no está permitido.regex para que coincida con 9-23 dígitos con cualquier cantidad de espacios o guiones entre
[\d[\s-]*]{9-23}
He intentado la siguiente expresión regular, pero parece que "[]" anidado no está permitido.regex para que coincida con 9-23 dígitos con cualquier cantidad de espacios o guiones entre
[\d[\s-]*]{9-23}
Estás en el camino correcto, lo que estás buscando es probablemente:
(\d[\s-]*){8,22}\d
@Bryan: ¿Cómo? '123-' tiene solo cuatro caracteres, por lo que no coincidirá con la condición '{9-23}'. – CanSpice
que coincidirá con '123456789-', que no es algo que deba coincidir (si entiendo el problema correctamente) –
@CanSpice: Me di cuenta de mi error poco después de que lo escribí. Tiene razón en que "123-" no coincidirá, pero "123456789-" coincidirá. –
Vamos a probar esto:
([0-9][ -]*){9,23}
Esta expresión regular es demasiado corto de una respuesta así que aquí está mi favorito
que coincidirá con '123456789-', que no es algo que debe coincidir (si entiendo el problema correctamente) –
Parece que no desea para que coincida con espacios iniciales o finales y rayas, por lo que el patrón que creo que va a trabajar es:
^\d([- ]*\d){8,22}$
es decir: un dígito, seguido de entre 8 y 22 grupos de cero o más guiones o espacios seguido de un único digi t.
Otra solución que puede ser más obvia es esta solución en dos etapas:
Por lo que vale la pena, podría considerar dividir en dos pasos. En C#, por ejemplo, podrías hacer algo como esto.
Regex.Match(Regex.Replace(str, "[ -]", ""), @"^\d{9,23}")
Se trata de dos operaciones de cadena, por lo que puede haber una penalización en el rendimiento si eso es importante para usted. Pero puede ser más legible para el próximo tipo.
¿Está bien permitir guiones o espacios antes del primer número, o después del último (es decir: ¿es 123456789- una coincidencia?)? ¿Y por "espacios" te refieres a cualquier espacio en blanco (incluyendo, por ejemplo, pestañas)? –