Eliminowanie spacji i mylnikw
[ -]
Opcje wyraenia regularnego: Brak
Odmiany wyrae regularnych: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby


Weryfikacja numeru
^(?:
  (?<visa>4[0-9]{12}(?:[0-9]{3})?) |
  (?<mastercard>5[1-5][0-9]{14}) |
  (?<discover>6(?:011|5[0-9][0-9])[0-9]{12}) |
  (?<amex>3[47][0-9]{13}) |
  (?<diners>3(?:0[0-5]|[68][0-9])[0-9]{11}) |
  (?<jcb>(?:2131|1800|35\d{3})\d{11})
)$
Opcje wyraenia regularnego: Swobodne stosowanie znakw biaych
Odmiany wyrae regularnych: .NET, PCRE 7, Perl 5.10, Ruby 1.9


^(?:
  (?P<visa>4[0-9]{12}(?:[0-9]{3})?) |
  (?P<mastercard>5[1-5][0-9]{14}) |
  (?P<discover>6(?:011|5[0-9][0-9])[0-9]{12}) |
  (?P<amex>3[47][0-9]{13}) |
  (?P<diners>3(?:0[0-5]|[68][0-9])[0-9]{11}) |
  (?P<jcb>(?:2131|1800|35\d{3})\d{11})
)$
Opcje wyraenia regularnego: Swobodne stosowanie znakw biaych
Odmiany wyrae regularnych: PCRE, Python


^(?:
  (4[0-9]{12}(?:[0-9]{3})?) |         # Visa
  (5[1-5][0-9]{14}) |                 # MasterCard
  (6(?:011|5[0-9][0-9])[0-9]{12}) |   # Discover
  (3[47][0-9]{13}) |                  # AMEX
  (3(?:0[0-5]|[68][0-9])[0-9]{11}) |  # Diners Club
  ((?:2131|1800|35\d{3})\d{11})       # JCB
)$
Opcje wyraenia regularnego: Swobodne stosowanie znakw biaych
Odmiany wyrae regularnych: .NET, Java, PCRE, Perl, Python, Ruby


^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9][0-9])[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35\d{3})\d{11}))$
Opcje wyraenia regularnego: Brak
Odmiany wyrae regularnych: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby


^(?:
  4[0-9]{12}(?:[0-9]{3})? |         # Visa
  5[1-5][0-9]{14} |                 # MasterCard
  6(?:011|5[0-9][0-9])[0-9]{12} |   # Discover
  3[47][0-9]{13} |                  # AMEX
  3(?:0[0-5]|[68][0-9])[0-9]{11} |  # Diners Club
  (?:2131|1800|35\d{3})\d{11}       # JCB
)$
Opcje wyraenia regularnego: Swobodne stosowanie znakw biaych
Odmiany wyrae regularnych: .NET, Java, PCRE, Perl, Python, Ruby


^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$
Opcje wyraenia regularnego: Brak
Odmiany wyrae regularnych: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby


Przykad strony internetowej z kodem JavaScriptu
<html>
<head>
<title>Test kart kredytowych</title>
</head>

<body>
<h1>Test kart kredytowych</h1>

<form>
<p>Prosz wpisa numer karty kredytowej:</p>

<p><input type="text" size="20" name="cardnumber"
          onkeyup="validatecardnumber(this.value)"></p>

<p id="notice">(nie wpisano adnego numeru karty kredytowej)</p>
</form>

<script>
function validatecardnumber(cardnumber) {
  // Eliminujemy spacje i mylniki:
  cardnumber = cardnumber.replace(/[ -]/g, '');
  // Sprawdzamy poprawno numeru karty kredytowej.
  // Ponisze wyraenie przechwytuje numer karty kredytowej za pomoc jednej z grup przechwytujcych:
  var match = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9][0-9])[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35\d{3})\d{11}))$/.exec(cardnumber);
  if (match) {
    // Lista typw kart kredytowych w kolejnoci zgodnej z porzdkiem grup przechwytujcych wyraenia regularnego:
    var types = ['Visa', 'MasterCard', 'Discover', 'American Express',
                 'Diners Club', 'JCB'];
    // Odnajdujemy grup przechwytujc, ktra zostaa dopasowana do danego numeru.
    // Pomijamy zerowy element tablicy dopasowa (reprezentujcy dopasowanie do caego wyraenia):
    for (var i = 1; i < match.length; i++) {
      if (match[i]) {
        // Wywietlamy typ karty kredytowej waciwy danej grupie:
        document.getElementById('notice').innerHTML = types[i - 1];
        break;
      }
    }
  } else {
    document.getElementById('notice').innerHTML = '(nieprawidowy numer karty)';
  }
}
</script>
</body>
</html>


Dodatkowa weryfikacja z wykorzystaniem algorytmu Luhna
function luhn(cardnumber) {
  // Konstruuje tablic zoon z cyfr numeru karty kredytowej:
  var getdigits = /\d/g;
  var digits = [];
  while (match = getdigits.exec(cardnumber)) {
    digits.push(parseInt(match[0], 10));
  }
  // Wykonuje algorytm Luhna na tej tablicy:
  var sum = 0;
  var alt = false;
  for (var i = digits.length - 1; i >= 0; i--) {
    if (alt) {
      digits[i] *= 2;
      if (digits[i] > 9) {
        digits[i] -= 9;
      }
    }
    sum += digits[i];
    alt = !alt;
  }
  // Wynik weryfikacji numeru karty kredytowej jest dopisywany do wczeniejszego komunikatu:
  if (sum % 10 == 0) {
    document.getElementById("notice").innerHTML += '; test Luhna prawidowy';
  } else {
    document.getElementById("notice").innerHTML += '; test Luhna nieprawidowy';
  }
}

