Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@quantfive/react-phone-input-2

quantfive203MIT2.14.3

A react component to format phone numbers

react, phone, format, number, input, telephone, javascript, international, tel, localized, material, bootstrap, i18n

readme

React-Phone-Input-2

Highly customizable phone input component with auto formatting.

npm version npm downloads PRs Welcome travis build

animation

Installation

npm install react-phone-input-2 --save

Usage

import PhoneInput from 'react-phone-input-2'
import 'react-phone-input-2/lib/style.css'

<PhoneInput
  country={'us'}
  value={this.state.phone}
  onChange={phone => this.setState({ phone })}
/>

available styles - style • high-res • material • bootstrap • semantic-ui • plain

Demo 1 (UI) - Demo 2 (CSS)

screenshot

Options

Name Type Description Example
country string initial country 'us' | 1
value string input state value
onlyCountries array country codes to be included ['cu','cw','kz']
preferredCountries array country codes to be at the top ['cu','cw','kz']
excludeCountries array array of country codes to be excluded ['cu','cw','kz']
placeholder string custom placeholder
searchPlaceholder string custom search placeholder
inputProps object props to pass into the input
Booleans Default Description
autoFormat true on/off phone formatting
disabled false disable input and dropdown
disableDropdown false disable dropdown only
disableCountryCode false
enableAreaCodes false enable local codes for all countries
enableLongNumbers false
countryCodeEditable true
enableSearch false enable search in the dropdown
disableSearchIcon false hide icon for the search field
<PhoneInput
  inputProps={{
    name: 'phone',
    required: true,
    autoFocus: true
  }}
/>

Contents

Style

containerClass string class for container
inputClass string class for input
buttonClass string class for dropdown button
dropdownClass string class for dropdown container
searchClass string class for search field
containerStyle object styles for container
inputStyle object styles for input
buttonStyle object styles for dropdown button
dropdownStyle object styles for dropdown container
searchStyle object styles for search field

Events

onChange onFocus onBlur onClick onKeyDown

Country data object not returns from onKeyDown event

Data Type Description
value/event string/object event or the phone number
country data object country object { name, dialCode, countryCode (iso2) }

Regions

Name Type Description
regions array/string to show countries only from specified regions
Regions
['america', 'europe', 'asia', 'oceania', 'africa']
Subregions
['north-america', 'south-america', 'central-america', 'carribean', 'eu-union', 'ex-ussr', 'ex-yugos', 'baltic', 'middle-east', 'north-africa']
<PhoneInput
  country='de'
  regions={'europe'}
/>

<PhoneInput
  country='us'
  regions={['north-america', 'carribean']}
/>

Predefined localization

es Spanish, de Deutsch, ru Russian, fr French
jp Japanese, cn Chinese, pt Portuguese, it Italian
ir Iranian, ar Arabic, id Indonesian

import es from 'react-phone-input-2/lang/es.json'

<PhoneInput
  localization={es}
/>

Local area codes

<PhoneInput
  enableAreaCodes={true}
  enableAreaCodes={['us', 'ca']}
/>

Custom masks

<PhoneInput
  onlyCountries={['fr', 'at']}
  masks={{fr: '+.. (...) ..-..-..', at: '+.. (....) ...-....'}}
/>

Custom area codes

<PhoneInput
  onlyCountries={['gr', 'fr', 'us']}
  areaCodes={{gr: ['2694', '2647'], fr: ['369', '463'], us: ['300']}}
/>

Other props

defaultMask ...... ...... ..
prefix +
copyNumbersOnly true
renderStringAsFlag string
autocompleteSearch false
jumpCursorToEnd false

Custom localization

<PhoneInput
  onlyCountries={['de', 'es']}
  localization={{de: 'Deutschland', es: 'España'}}
/>

<PhoneInput
  onlyCountries={['de', 'es']}
  localization={{'Germany': 'Deutschland', 'Spain': 'España'}}
/>

Preserve countries order

<PhoneInput
  onlyCountries={['fr', 'at']}
  preserveOrder={['onlyCountries', 'preferredCountries']}
/>

Guides

Phone without dialCode

handleOnChange(value, data, event) {
  this.setState({ rawPhone: value.replace(/[^0-9]+/g,'').slice(data.dialCode.length) })
}

Check validity of the phone number

<PhoneInput
  isValid={(inputNumber, onlyCountries) => {
    return onlyCountries.some((country) => {
      return startsWith(inputNumber, country.dialCode) || startsWith(country.dialCode, inputNumber);
    });
  }}
/>

CDN

<script src="https://unpkg.com/react-phone-input-2@2.x/dist/lib.js"></script>

Contributing

Code style changes not allowed

License

GitHub license

Based on react-phone-input

Make sure you have donated for lib maintenance: Donate

changelog

2.11.0 (December 4, 2019)

  • Add languages: jp, cn, pt, it, ir, ar, id
  • Replace disableAreaCodes to enableAreaCodes
  • defaultCountrycountry
  • enableSearchFieldenableSearch
  • Search update, search countries firstly using iso2 codes
  • Set countries using dialCode
  • Add Kosovo, subregions: ex-yugos, baltic
  • Add defaultMask, prefix
  • Copy number from input without formatting
  • Select whole number when double click
  • Pass event object to onChange handler
  • Style update: style.css high-res.css material.css bootstrap.css semantic-ui.css plain.css

2.10.0 (September 18, 2019)

  • Add languages: es, de, ru, fr
  • Custom areaCodes
  • Search localized country name #123
  • renderStringAsFlag to show string instead of flag
  • Fix input freezing on area codes #119
  • Add preserveOrder #109
  • Better keyboard support
  • Make lib work inside shadow DOM #105 @newying61
  • IE Polyfyll startswith #102

2.9.3 (April 8, 2019)

  • SSR support (removed references to browser objects)
  • Change importing method
  • defaultCountry update fix #70
  • Add disableSearchIcon, searchStyle props
  • Tests

2.8.0 (February 20, 2019)

  • Custom phone masks
  • Localization using iso2 codes
  • Upgrade dependencies & webpack #65 @jnsdls
  • Remove lodash #44
  • Keep detection of area codes with disableAreaCodes #49
  • Drop setSelectionRange() check #50
  • Customizable placeholder for search field
  • Update phone masks
  • Fix first number cutting #72

2.7.1 (November 29, 2018)

  • Styles update, fix SearchField autoFocus
  • SearchField @awthwathje

2.6.1 (September 26, 2018)

  • Pass props into the input via inputExtraProps
  • Remove autoFocus, name, required props

2.5.1 (July 26, 2018)

  • Add autoFocus prop to input @mikesholiu
  • Focus and highlight preferred country
  • Abstracts global document and document related properties @Alex-ray

2.4.1 (July 1, 2018)

  • Fix backspace
  • Always show right bracket
  • Add containerStyle prop
  • Fix areaCodes doesn't change when same country selected
  • Make country code not editable by passing prop countryCodeEditable @HasanShehryarJaffri

2.3.0 (May 27, 2018)

  • Add localization feature
  • Add classname to the main container
  • Add custom class configurations @Alex-ray

2.2.1 (March 15, 2018)

  • Add masks for disableCountryCode attribute
  • Add attribute to enable non-mask phone lengths
  • Make phone formatter to reject non-mask phone lengths

2.1.1 (January 23, 2018)

  • Add country object to be return to props functions @shaypeleg1
  • SearchCountry error fix
  • Add disableDropdown and disableCountryCode

2.0.0 (September 4, 2017)

  • Add feature to select from regions
  • Add regions and encapsulation
  • Styles changed, styles customization
  • Hide dropdown by click outside
  • String refs replaced by callback refs
  • Hide flag by default, custom placeholder
  • Add property to disable area codes
  • Fix preferred countires dropdown bug
  • Auto-update flag if value field used, caret right-auto-align