Tengo un formulario que, si una casilla de verificación es falsa, aplica la validación en una entrada de texto usando la directiva ng-required. Si la casilla de verificación es verdadera, el campo está oculto y ng-required se establece en falso.
El problema es que también tengo una expresión regular para la validación especificada en la entrada, además de utilizar la directiva angular ng-pattern. El problema con el que me estoy encontrando es que si un usuario completa un número de teléfono no válido, marca la casilla para desactivar esa entrada (y, en consecuencia, no necesita más validación), el formulario no permitirá el envío, ya que no es válido según el patrón ng.
Intenté resolver este problema agregando una función ng-change para establecer el modelo de entrada en nulo, sin embargo, el patrón ng y, por lo tanto, el campo todavía está configurado como no válido en el conjunto inicial de la casilla de verificación en falso. Sin embargo, si desmarco la casilla, estableciendo todo de nuevo en la carga inicial del formulario, luego vuelvo a marcar la casilla, el formulario es válido y se puede enviar. No estoy seguro de lo que me estoy perdiendo. Aquí está el código ng-change que tengo hasta ahora:
var phoneNumberRegex = /^\(?(\d{3})\)?[ .-]?(\d{3})[ .-]?(\d{4})$/;
$scope.phoneNumberPattern = phoneNumberRegex;
$scope.removeValidation = function() {
if ($scope.cell._newUser === false) {
$scope.request._number = '';
$scope.phoneNumberPattern = /[0-9a-zA-Z]?/;
} else {
$scope.phoneNumberPattern = phoneNumberRegex;
}
};