2017-04-26 21 views
0

我的電流輸入看起來像這樣角度,我可以有2 NG模式,驗證同樣的提交

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

我NG模式=「ctrl.emailRegex」驗證電子郵件是否有效或無效

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

但我想阻止信息@,@管理,幫助@,@銷售郵件,所以我改變了正則表達式來

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

到目前爲止好,但我想顯示

無效的電子郵件

爲 「[email protected]!!!!!.com!」

信息@,@管理,幫助@,@銷售電子郵件不準

[email protected]

怎樣纔可以有2 NG模式在相同的輸入?

謝謝

回答

1

您可以只驗證一個輸入模式。而且,即使你可以通過指令以某種方式做到這一點,它將是一個太骯髒的解決方案。 而不是,我會建議在輸入ng-change的函數內使用正則表達式驗證輸入,並使用formName.inputName.$setValidity來設置輸入的自定義有效性。這可以讓你有一個回退,如果一個模式通過。

因此,例如,ctrl.emailChanged很可能有這樣的事情,

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 
    ... 

} 

或者,你可以驗證邏輯移動到另一個功能,只是把它從emailChanged