Самый простой способ - использовать переменную в области действия вашего контроллера для значения маски. Следите за значением номера копии и динамически меняйте маску в зависимости от типа карты. Чтобы это сработало, вы должны отключить проверку ui-mask
через ui-options
. Затем $scope.$watch()
значение номера карты по мере его изменения.
Чтобы определить тип карты. Для более надежного подхода вы можете использовать более подробную библиотеку, например тип кредитной карты а>
function getCreditCardType(creditCardNumber) {
// start without knowing the credit card type
var result = "unknown";
// first check for MasterCard
if (/^5[1-5]/.test(creditCardNumber)) {
result = "mastercard";
}
// then check for Visa
else if (/^4/.test(creditCardNumber)) {
result = "visa";
}
// then check for AmEx
else if (/^3[47]/.test(creditCardNumber)) {
result = "amex";
}
// then check for Diners
else if (/3(?:0[0-5]|[68][0-9])[0-9]{11}/.test(creditCardNumber)) {
result = "diners"
}
// then check for Discover
else if (/6(?:011|5[0-9]{2})[0-9]{12}/.test(creditCardNumber)) {
result = "discover";
}
return result;
}
Затем измените переменную маски в соответствии с требованиями конкретного типа карты.
function getMaskType(cardType){
var masks = {
'mastercard': '9999 9999 9999 9999',
'visa': '9999 9999 9999 9999',
'amex': '9999 999999 99999',
'diners': '9999 9999 9999 99',
'discover': '9999 9999 9999 9999',
'unknown': '9999 9999 9999 9999'
};
return masks[cardType];
}
Соберите все это в своем контроллере.
myApp.controller("myCtrl", function($scope) {
$scope.cc = {number:'', type:'', mask:''};
$scope.maskOptions = {
allowInvalidValue:true //allows us to watch the value
};
$scope.$watch('cc.number', function(newNumber){
$scope.cc.type = getCreditCardType(newNumber);
$scope.cc.mask = getMaskType($scope.cc.type);
});
});
И HTML будет выглядеть так:
<input ng-model="cc.number" ui-mask="{{cc.mask}}" ui-options="maskOptions" />
Пример: https://jsfiddle.net/gq42wbL5/18/.
person
ndmweb
schedule
19.03.2017
4
). это скажет вам, что вам нужно сделать, чтобы отформатировать его. - person Marc B   schedule 28.01.2016