Skip to main content

usePhoneInput

usePhoneInput is a hook for providing phone formatting to existing input components.

Use phone (as value), handlePhoneValueChange (as onChange callback) and inputRef (as passed ref) to handle input.

Usage Example​

// import { usePhoneInput } from 'react-international-phone';

const {
inputValue,
phone,
country,
setCountry,
handlePhoneValueChange,
inputRef,
} = usePhoneInput({
defaultCountry: 'us',
value: '+1 (234)',
onChange: ({ phone, inputValue, country }) => {
// make something on change
},
});

Hook arguments​

value​

Phone value.

  • Type: string
  • Default: ""

onChange​

Callback that calls on phone change

  • Type: (data: { phone: string; inputValue: string; country: ParsedCountry }) => void
  • Default: undefined

defaultCountry​

Default country value (iso2).

  • Type: CountryIso2
  • Default: "us"

countries​

An array of available countries to select (and guess)

  • Type: CountryData[]
  • Default: defaultCountries

prefix​

Prefix for phone value.

  • Type: string
  • Default: "+"

defaultMask​

This mask will apply on countries that does not have specified mask.

  • Type: string
  • Default: "............"

charAfterDialCode​

Char that renders after country dial code.

  • Type: string
  • Default: " "

historySaveDebounceMS​

Save value to history if there were not any changes in provided milliseconds timeslot. Undo/redo (ctrl+z/ctrl+shift+z) works only with values that are saved in history

  • Type: number
  • Default: 200

disableCountryGuess​

Disable country guess on value change. onCountryGuess callback would not be called.

  • Type: boolean
  • Default: false

disableDialCodePrefill​

Disable dial code prefill on initialization. Dial code prefill works only when empty phone value have been provided.

  • Type: boolean
  • Default: false

forceDialCode​

Always display the dial code. Dial code can't be removed/changed by keyboard events, but it can be changed by pasting another country phone value.

  • Type: boolean
  • Default: false

disableDialCodeAndPrefix​

Display phone value will not include passed dialCode and prefix if set to true. forceDialCode value will be ignored.

  • Type: boolean
  • Default: false

disableFormatting​

Disable phone value mask formatting. All formatting characters will not be displayed, but the mask length will be preserved.

  • Type: boolean
  • Default: false

allowMaskOverflow​

Allow input to exceed the mask length. When set to true, formatting mask will apply to the part that fits within the mask capacity, and overflow digits will be appended at the end unformatted.
For example: "+123456789012", will be formatted like "+1 (234) 567-89012"

  • Type: boolean
  • Default: false

inputRef​

Ref for the input element.

  • Type: React.MutableRefObject<HTMLInputElement | null>
  • Default: undefined

Returned values​

inputValue​

Formatted phone string. Value that should be rendered inside input element.

  • Type: string

phone​

Phone in E164 format.

  • Type: string

handlePhoneValueChange​

Change handler for input component.

  • Type: (e: React.ChangeEvent<HTMLInputElement>) => string

inputRef​

Ref object for input component (handles caret position, focus and undo/redo).

  • Type: React.RefObject<HTMLInputElement>

country​

Current country object.

  • Type: ParsedCountry

setCountry​

Country setter.

  • Type: (country: CountryIso2, options?: { focusOnInput: boolean })) => void