2017-04-26 6 views
0

Mein aktueller Eingang diesesAngular kann ich 2 ng-Muster das gleiche eingereicht

sieht aus wie
<input type="email" name="email" 
    ng-pattern="emailRegex" 
    ng-change="emailChanged()" 
    required /> 

Mein ng-Muster zu validieren = „ctrl.emailRegex“ bestätigt, wenn eine E-Mail gültig ist oder nicht

/^[a-zA-Z0-9._%+-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{1,63}$/; 

aber ich möchte info @, admin @, help @ blockieren, sales @ E-Mails, so änderte ich die Regex

/^(?!(?:info|admin|help|sales)@)[a-zA-Z0-9._%+-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{1,63}$/ 

so weit so gut, aber Ich würde

Ungültige E-Mail

auf "[email protected]!!!!!.com!" Zeigen, wie

und

info @, admin @, help @, sales @ E-Mails werden nicht

erlaubt

Wie kann ich 2 ng-Muster [email protected] in der gleichen Eingabe?

Dank

Antwort

1

Sie können nur ein Muster für eine Eingabe validieren. Und selbst wenn Sie es irgendwie mit einer Direktive machen könnten, wäre es eine zu dreckige Lösung. Anstatt würde ich empfehlen, die Eingabe gegen Regex (es) innerhalb der Funktion ng-change zu validieren und formName.inputName.$setValidity zu verwenden, um benutzerdefinierte Gültigkeit der Eingabe festzulegen. Damit haben Sie einen Fallback, wenn ein Muster übergeben wird.

So zum Beispiel könnte ctrl.emailChanged wahrscheinlich so etwas wie dieses haben,

ctrl.emailChanged = function() { 
    var emailPattern = /^[a-zA-Z0-9._%+-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{1,63}$/; 
    var customValidateEmail = /^(?!(?:info|admin|help|sales)@)[a-zA-Z0-9._%+-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{1,63}$/; 

    if(!emailPattern.test(ctrl.registrationForm.email)) { 
    // Invalid email 
    } else if (customValidateEmail.test(ctrl.registrationForm.email)) { 
    // handle accordingly 
    } 

    // rest of the things 
    ... 

} 

Alternativ können Sie die Validierungslogik auf eine andere Funktion bewegen und es nur von emailChanged nennen.

Verwandte Themen