Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
ui-component-library / src / forms / deps / isValidZipCode.ts
Size: Mime:
import { isString } from 'exotic'
import { test } from './__match'
import { isValidLength } from './isValidLength'

const matchUnitedKingdomPostCode = /^[A-Z]{1,2}[0-9RCHNQ][0-9A-Z]?\s?[0-9][ABD-HJLNP-UW-Z]{2}$|^[A-Z]{2}-?[0-9]{4}$/
const matchCanadianPostalCode = /^(?!.*[DFIOQU])[A-VXY][0-9][A-Z]\s?[0-9][A-Z][0-9]$/
const matchUnitedStatesZipCode = /^[0-9]{5}(?:-[0-9A-Za-z\d-]{4})?$/
const matchZipCodeLoosest = /^[0-9a-zA-Z]+$/

const isCanadian = test(matchCanadianPostalCode)
const isUnitedStates = test(matchUnitedStatesZipCode)
const isUnitedKingdom = test(matchUnitedKingdomPostCode)
const _isZipCodeLoosest = test(matchZipCodeLoosest)

// && String(x) !== '000'
// isValidLength(x, 2)
const isZipCodeLoosest = x => x.length > 2 && _isZipCodeLoosest(x)

/**
 * @see https://github.com/chriso/validator.js/blob/master/src/lib/isPostalCode.js
 * @see http://formvalidation.io/validators/zipCode/
 * @see https://stackoverflow.com/questions/578406/what-is-the-ultimate-postal-code-and-zip-regex
 * @note - the conditional branching is intentional
 * @see https://gist.github.com/aretecode/9b1765a897554b82da96591372d3c149
 */
function isValidZipCode(zipCode: string | number): boolean {
  if (isString(zipCode) === false) {
    return false
  } else if (isCanadian(zipCode)) {
    return true
  } else if (isUnitedStates(zipCode)) {
    return true
  } else if (isUnitedKingdom(zipCode)) {
    return true
  } else if (isZipCodeLoosest(zipCode)) {
    return true
  } else {
    return false
  }
}

export { isValidZipCode }
export default isValidZipCode