Ich habe ein Formular, das, wenn ein Kontrollkästchen falsch ist, die Validierung einer Texteingabe unter Verwendung der Anweisung ng-require erzwingt. Wenn das Kontrollkästchen true ist, wird das Feld ausgeblendet und ng-required auf false gesetzt.
Das Problem ist, dass ich auch einen regulären Ausdruck für die Validierung am Eingang habe, der auch die Winkelanweisung ng-pattern verwendet. Das Problem, auf das ich stoße, ist, dass wenn ein Benutzer eine ungültige Telefonnummer eingibt, das Kontrollkästchen aktiviert, um diese Eingabe zu deaktivieren (und folglich keine weitere Validierung benötigt), das Formular keine Übermittlung zulässt, da es aufgrund des ng-Musters ungültig ist.
Ich habe versucht, dieses Problem zu beheben, indem ich eine ng-change-Funktion hinzugefügt habe, um das Eingabemodell auf null zu setzen. Das ng-Muster und damit das Feld sind jedoch beim ersten Satz des Kontrollkästchens immer noch auf false gesetzt. Wenn ich jedoch das Kontrollkästchen deaktiviere und alles auf das ursprüngliche Laden des Formulars zurücksetze, aktivieren Sie das Kontrollkästchen erneut. Das Formular ist gültig und kann gesendet werden. Ich bin mir nicht sicher, was mir fehlt. Hier ist der ng-change Code, den ich bisher habe:
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;
}
};
test
Methode hat. Aus diesem Grund geben wir ihm ein Objekt mit unserer eigenen Gewohnheittest()
, das im Wesentlichen ein natives JS emuliertRegExp
. 2) Dasvalue
wird natürlich von Angular bei der Durchführung der eigentlichen Gültigkeitsprüfung übergeben.Vielleicht können Sie Nikos 'großartiger Antwort nichts wegnehmen:
Beachten Sie die zweite Eingabe: Wir können eine verwenden
ng-if
, um das Rendern und die Validierung in Formularen zu steuern. Wenn dierequireTel
Variable nicht gesetzt ist, wird die zweite Eingabe nicht nur ausgeblendet, sondern überhaupt nicht gerendert. Daher besteht das Formular die Validierung und die Schaltfläche wird aktiviert, und Sie erhalten das, was Sie benötigen.quelle
Verwendetes Muster:
Verwendete Referenzdatei:
Beispiel für die Eingabe:
quelle
quelle
Ich bin neulich darauf gestoßen.
Was ich getan habe, was einfacher zu sein scheint, ist, das Muster für eine Variable im Bereich festzulegen und in der Ansicht in ng-pattern darauf zu verweisen.
Wenn "das Kontrollkästchen deaktiviert ist", setze ich den Regex-Wert beim onChanged-Rückruf einfach auf /.*/ (falls deaktiviert). ng-Muster-Picks, die sich ändern und "OK, Ihr Wert ist in Ordnung" sagen. Das Formular ist jetzt gültig. Ich würde auch die fehlerhaften Daten vom Feld entfernen, damit Sie dort keine offensichtlich schlechte Telefonnummer haben.
Ich hatte zusätzliche Probleme mit ng-erforderlich und tat das Gleiche. Lief wie am Schnürchen.
quelle
Es scheint, dass eine am häufigsten gewählte Antwort in dieser Frage aktualisiert werden sollte, denn wenn ich es versuche, trifft es nicht zu
test
Funktion und Validierung nicht angewendet, was nicht funktioniert.Beispiel aus Angular-Dokumenten funktioniert gut für mich:
Integrierte Validatoren ändern
html
js
Plunker
quelle
Sie können die Website https://regex101.com/ verwenden. um Ihr eigenes spezifisches Muster für ein Land zu erstellen:
Zum Beispiel Polen:
quelle