• Stars
    star
    565
  • Rank 78,889 (Top 2 %)
  • Language
    CoffeeScript
  • License
    MIT License
  • Created over 10 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

💰 A jQuery-free general purpose library for building credit card forms, validating inputs and formatting numbers.

Payment Build Status npm

A jQuery-free general purpose library for building credit card forms, validating inputs and formatting numbers. Heavily, heavily based on @stripe's jquery.payment library, but without the jQuery.

For example, you can make a input act like a credit card field (with number formatting and length restriction):

Payment.formatCardNumber(document.querySelector('input.cc-num'));

Then, when the payment form is submitted, you can validate the card number on the client-side:

var valid = Payment.fns.validateCardNumber(document.querySelector('input.cc-num').value);

if (!valid) {
  alert('Your card is not valid!');
  return false;
}

You can find a full demo here.

Supported card types are:

  • Visa
  • MasterCard
  • American Express
  • Discover
  • JCB
  • Diners Club
  • Maestro
  • Laser
  • UnionPay
  • Elo
  • Hipercard
  • Troy

API

Payment.formatCardNumber(element[, maxLength])

Formats card numbers:

  • Includes a space between every 4 digits
  • Restricts input to numbers
  • Limits to 16 numbers
  • Supports American Express formatting
  • Adds a class of the card type (e.g. 'visa') to the input
  • If second parameter is specified then card length will be limited to its value (19 digits cards are not in use despite being included in specifications)

Example:

Payment.formatCardNumber(document.querySelector('input.cc-num'));

Payment.formatCardExpiry(element)

Formats card expiry:

  • Includes a / between the month and year
  • Restricts input to numbers
  • Restricts length

Example:

Payment.formatCardExpiry(document.querySelector('input.cc-exp'));

Payment.formatCardCVC(element)

Formats card CVC:

  • Restricts length to 4 numbers
  • Restricts input to numbers

Example:

Payment.formatCardCVC(document.querySelector('input.cc-cvc'));

Payment.restrictNumeric(element)

General numeric input restriction.

Example:

Payment.restrictNumeric(document.querySelector('[data-numeric]'));

Payment.fns.validateCardNumber(number)

Validates a card number:

  • Validates numbers
  • Validates Luhn algorithm
  • Validates length

Example:

Payment.fns.validateCardNumber('4242 4242 4242 4242'); //=> true

Payment.fns.validateCardExpiry(month, year), Payment.fns.validateCardExpiry('month / year')

Validates a card expiry:

  • Validates numbers
  • Validates in the future
  • Supports year shorthand
  • Supports formatted as formatCardExpiry input value

Example:

Payment.fns.validateCardExpiry('05', '20'); //=> true
Payment.fns.validateCardExpiry('05', '2015'); //=> true
Payment.fns.validateCardExpiry('05', '05'); //=> false
Payment.fns.validateCardExpiry('05 / 25'); //=> true
Payment.fns.validateCardExpiry('05 / 2015'); //=> false

Payment.fns.validateCardCVC(cvc, type)

Validates a card CVC:

  • Validates number
  • Validates length to 4

Example:

Payment.fns.validateCardCVC('123'); //=> true
Payment.fns.validateCardCVC('123', 'amex'); //=> true
Payment.fns.validateCardCVC('1234', 'amex'); //=> true
Payment.fns.validateCardCVC('12344'); //=> false

Payment.fns.cardType(number)

Returns a card type. Either:

  • visa
  • mastercard
  • discover
  • amex
  • jcb
  • dinersclub
  • maestro
  • laser
  • unionpay
  • elo
  • hipercard

The function will return null if the card type can't be determined.

Example:

Payment.fns.cardType('4242 4242 4242 4242'); //=> 'visa'

Payment.fns.cardExpiryVal(string) and Payment.cardExpiryVal(el)

Parses a credit card expiry in the form of MM/YYYY, returning an object containing the month and year. Shorthand years, such as 13 are also supported (and converted into the longhand, e.g. 2013).

Payment.fns.cardExpiryVal('03 / 2025'); //=> {month: 3: year: 2025}
Payment.fns.cardExpiryVal('05 / 04'); //=> {month: 5, year: 2004}
Payment.fns.cardExpiryVal(document.querySelector('input.cc-exp')) //=> {month: 4, year: 2020}

This function doesn't perform any validation of the month or year; use Payment.fns.validateCardExpiry(month, year) for that.

Card Type functions

We've provided utility functions to change which card types can be identified by Payment.

Payment.getCardArray()

Returns the array of card types.

Payment.setCardArray(cardTypes)

Overrides the array of card types with a new array.

Payment.addToCardArray(cardType)

Add a new card type to the card array.

Payment.removeFromCardArray(cardName)

Remove a card type from the card array.

Example

Look in ./example/index.html

Building

Run npm run build

Running tests

Run npm run test

Autocomplete recommendations

We recommend you turn autocomplete on for credit card forms, except for the CVC field. You can do this by setting the autocomplete attribute:

<form autocomplete="on">
  <input class="cc-number">
  <input class="cc-cvc" autocomplete="off">
</form>

You should also mark up your fields using the Autofill spec. These are respected by a number of browsers, including Chrome.

<input type="text" class="cc-number" pattern="\d*" autocompletetype="cc-number" placeholder="Card number" required>

Set autocompletetype to cc-number for credit card numbers, cc-exp for credit card expiry and cc-csc for the CVC (security code).

Mobile recommendations

We recommend you set the pattern attribute which will cause the numeric keyboard to be displayed on mobiles:

<input class="cc-number" pattern="\d*">

You may have to turn off HTML5 validation (using the novalidate form attribute) when using this pattern, as it won't match space formatting.

More Repositories

1

card

💳 make your credit card form better in one line of code
SCSS
11,660
star
2

command

✒️ Making the web better with Slack-like slash commands.
JavaScript
1,105
star
3

flask-nameko

A wrapper for using nameko services with Flask
Python
81
star
4

githubbattle

:octocat: Like AIM fight...but for Github.
JavaScript
63
star
5

mixpanel-python-async

⚡ Batch and send your Mixpanel API calls asynchronously in Python
Python
59
star
6

urlmatch

🔥 A Python library for easily pattern matching wildcard URLs
Python
39
star
7

wordpress-ajax-settings

💻 Ajaxify the settings for your WordPress plugin — in two lines of code
PHP
36
star
8

calendarculator

📆 A command line tool to count the hours your team spends in meetings
JavaScript
32
star
9

phalert

☎️ Get a text message whenever your domain is mentioned on Product Hunt
CoffeeScript
31
star
10

birthday-weekly

Birthdays for days
TypeScript
7
star
11

qj

A minimal jQuery replacement used in Card and Payment
JavaScript
5
star
12

smile

Use Amazon Smile every time
JavaScript
4
star
13

thirdpartycookies

A hands-on tutorial for enabling third party cookies for any site in any browser
CSS
4
star
14

macsonos

A tiny menubar app that lets you stream audio from your Mac to your Sonos speakers.
JavaScript
3
star
15

jessepollak.com

A new personal website
JavaScript
3
star
16

wordpress-plugin-installer

Install WordPress plugins from your WordPress plugin
PHP
3
star
17

blog

Personal Blog
Ruby
3
star
18

crowdsaleapp

Augur crowdsale site
HTML
2
star
19

Memeorandum-Leaderboard

JavaScript
2
star
20

gulp-express-coffee-sass

A Node start app with express, coffeescript, browserify, and sass
CoffeeScript
2
star
21

independent_study

code for the independent study
Ruby
2
star
22

free-game-notifier

MLB.tv Free Game of the Day Notifier
Ruby
2
star
23

mint-feed

A little experiment to build a world-class mint feed
Solidity
2
star
24

Graph-Colorer

A graph coloring script I wrote for my Discrete Mathematics class
Ruby
1
star
25

router

HTML
1
star
26

sinatra-skeleton

A skeleton for Sinatra apps to deploy to Heroku.
JavaScript
1
star
27

super-old-blog

My personal website
Ruby
1
star
28

donotpaylist

JavaScript
1
star
29

Twictionary

A live updating dictionary based on the Twitter stream
Ruby
1
star
30

iron-io

Repo for testing out Iron.io
Ruby
1
star
31

courserecommender

Python
1
star