Skip to content

An NPM Package that provides formatting and validation for credit card information input fields

Notifications You must be signed in to change notification settings

abayomi1196/react-creditcard-validator

Repository files navigation

React CreditCard Validator

All Contributors

A React Custom Hook to provide validation and formatting for payment card input fields. Motivated by React Payment Inputs. This package offers a fully typed alternative, written completely in TypeScript.

Requirements

Requires a hooks-compatible version of React(>= v16.8).

Installation

  npm install react-creditcard-validator --save

  # or, if u prefer Yarn, you can run:

  yarn add react-creditcard-validator

Usage

import React from 'react';
import { useCreditCardValidator, images } from 'react-creditcard-validator';

export default function PaymentInputs() {
  const {
    getCardNumberProps,
    getExpiryDateProps,
    getCVCProps,
    getCardImageProps,
    meta: { erroredInputs }
  } = useCreditCardValidator();

  return (
    <div>
      <input {...getCardNumberProps()} />
      <small>{erroredInputs.cardNumber && erroredInputs.cardNumber}</small>

      <input {...getExpiryDateProps()} />
      <small>{erroredInputs.expiryDate && erroredInputs.expiryDate}</small>

      <input {...getCVCProps()} />
      <small>{erroredInputs.cvc && erroredInputs.cvc}</small>

      <svg {...getCardImageProps({ images })} />
    </div>
  );
}

By Spreading the prop getter functions on the inputs, You get automatic formatting, focus, and validation.

Note: Pass all custom event handlers (e.g onChange) inside the prop getter function e.g (getCardNumberProps({onChange: (e) => console.log(e.target.value)})), so that the default event handlers are not overwritten

Custom Validation

const data = useCreditCardValidator(options);

options

Object({cardNumberValidator, cvcValidator, expiryDateValidator})

options.cardNumberValidator

Function(cardNumber: string) => string | undefined

options.cvcValidator

Function(cvc: string) => string | undefined

options.expiryDateValidator

Function(month: string, year: string) => string | undefined

Example
  function expDateValidate(month: string, year: string) {
    if (Number.parseInt(year) > 2035) {
      return "Expiry Date Year cannot be greater than 2035";
    }
    return;
  }

  export default function MyComponent() {
    const { ... } = useCreditCardValidator({expiryDateValidator: expDateValidate);
  }

Limitations

Currently only offers formatting and images for MasterCard, Verve & Visa cards.

Contributors ✨

Thanks goes to these wonderful people (emoji key):


Silva Chijioke Michael

💻

JoshX

📖 💻

This project follows the all-contributors specification. Contributions of any kind welcome!

About

An NPM Package that provides formatting and validation for credit card information input fields

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published