Формат номера кредитной карты

Как форматировать и проверять номер кредитной карты с пробелами между четырьмя цифрами при вводе:

eg: 4464 6846 4354 3564 

Я пытался:

 $('.creditno').keyup(function() { cc = $(this).val().split("-").join(""); cc = cc.match(new RegExp('.{1,4}$|.{1,4}', 'g')).join("-"); $(this).val(cc); }); 

Пожалуйста помоги

Попробуй это:

 function cc_format(value) { var v = value.replace(/\s+/g, '').replace(/[^0-9]/gi, '') var matches = v.match(/\d{4,16}/g); var match = matches && matches[0] || '' var parts = [] for (i=0, len=match.length; i<len; i+=4) { parts.push(match.substring(i, i+4)) } if (parts.length) { return parts.join(' ') } else { return value } } 

Примечание. Для получения подробной информации см. https://www.peterbe.com/plog/cc-formatter .

Чтобы запретить пользователю вводить только номер:

Javascript Way

 <input type="text" id="txt_cardNumber" name="txt_cardNumber" onkeypress="return checkDigit(event)"> function checkDigit(event) { var code = (event.which) ? event.which : event.keyCode; if ((code < 48 || code > 57) && (code > 31)) { return false; } return true; } 

ИЛИ

 function checkDigit() { var allowedChars = "0123456789"; var entryVal = document.getElementById('txt_cardNumber').value(); var flag; for(var i=0; i<entryVal.length; i++){ flag = false; for(var j=0; j<allowedChars.length; j++){ if(entryVal.charAt(i) == allowedChars.charAt(j)) { flag = true; } } if(flag == false) { entryVal = entryVal.replace(entryVal.charAt(i),""); i--; } } return true; } 

Путь HTML5

 <input type="text" id="txt_cardNumber" name="txt_cardNumber" pattern="[0-9.]+"> <input type="number" id="txt_cardNumber" name="txt_cardNumber"> 

jQuery Way

 $("#txt_cardNumber").keypress(function (e) { if ((e.which < 48 || e.which > 57) && (e.which !== 8) && (e.which !== 0)) { return false; } return true; }); 

Примечание. Пожалуйста, проверьте здесь, чтобы получить дополнительную информацию о различных ключевых кодах.

найти

Plunker для форматирования номеров кредитных карт

используя директиву angularjs. Форматировать номера карт в xxxxxxxxxxxx3456 Fromat.

 angular.module('myApp', []) .directive('maskInput', function() { return { require: "ngModel", restrict: "AE", scope: { ngModel: '=', }, link: function(scope, elem, attrs) { var orig = scope.ngModel; var edited = orig; scope.ngModel = edited.slice(4).replace(/\d/g, 'x') + edited.slice(-4); elem.bind("blur", function() { var temp; orig = elem.val(); temp = elem.val(); elem.val(temp.slice(4).replace(/\d/g, 'x') + temp.slice(-4)); }); elem.bind("focus", function() { elem.val(orig); }); } }; }) .controller('myCtrl', ['$scope', '$interval', function($scope, $interval) { $scope.creditCardNumber = "1234567890123456"; }]); 
 <?php function luhn_check($number) { // Strip any non-digits (useful for credit card numbers with spaces and hyphens) $number=preg_replace('/\D/', '', $number); // Set the string length and parity $number_length=strlen($number); $parity=$number_length % 2; // Loop through each digit and do the maths $total=0; for ($i=0; $i<$number_length; $i++) { $digit=$number[$i]; // Multiply alternate digits by two if ($i % 2 == $parity) { $digit*=2; // If the sum is two digits, add them together (in effect) if ($digit > 9) { $digit-=9; } } // Total up the digits $total+=$digit; } // If the total mod 10 equals 0, the number is valid return ($total % 10 == 0) ? TRUE : FALSE; } ?> 
 function testCreditCard () { myCardNo = document.getElementById('CardNumber').value; myCardType = document.getElementById('CardType').value; if (checkCreditCard (myCardNo,myCardType)) { alert ("Credit card has a valid format") } else {alert (ccErrors[ccErrorNo])}; } 

проверьте эту ссылку для lib http://www.braemoor.co.uk/software/creditcard.shtml