es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validación de Angular FormControl con expresiones regulares: las líneas del textarea no deben comenzar con caracteres especiales.

Tengo un área de texto con un FormControl simple, que me gustaría validar a través del método Validators.pattern(). Ninguna de las nuevas líneas debe comenzar con un ? o *. Eso es todo lo que se requiere.

He intentado lo siguiente:

control = new FormControl('', Validators.pattern(/^(\?|\*)$/));

Con esto, puedo validar la primera línea (funciona bien si la línea comienza con un carácter especial), pero tan pronto como presiono enter, mi FormControl será inválido.

¿Cómo debo ajustar la expresión regular para cumplir con los requisitos?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para cumplir con los requisitos, la regex debe ser modificada para asegurar que ninguna de las nuevas líneas empiece con un ? o *, pero permita que el texto continúe en la misma línea incluso si empieza con ? o *. Para hacer esto, el patrón de la regex puede ser modificado para permitir que aparezca cualquier carácter que no sea \n, ?, y * cualquier cantidad de veces, seguido de nada o caracteres de espacio en blanco (espacios, tabulaciones, etc.), seguido de nada o los caracteres que no deben estar al principio de una nueva línea. El patrón de regex modificado puede verse así:

    /^([^\n?*]*([\s]?[\n]?[\s])?)*[^?\s*].*$/

    Este patrón de regex coincide con cualquier cadena que comienza con cualquier cantidad de caracteres que no sean \n, ?, y *, seguido de nada o caracteres de espacio en blanco, seguido de nada o un carácter de nueva línea, seguido nuevamente de nada o caracteres de espacio en blanco. Luego, repite el mismo patrón cualquier cantidad de veces para permitir múltiples líneas, y finalmente, requiere que la última línea no comience con ? ni *.

    Usando este patrón en el método Validators.pattern(), el código puede verse así:

    control = new FormControl('', Validators.pattern(/^([^\n?*]*([\s]?[\n]?[\s])?)*[^?\s*].*$/));

    Con este patrón de regex modificado, el FormControl será válido siempre y cuando ninguna de las nuevas líneas comience con ? o *.

Comments are closed.