intouch-phone-input
v2.15.16
Published
A react component to format phone numbers for intouch
Downloads
87
Readme
InTouch-Phone-Input
Highly customizable phone input component with auto formatting for InTouch projects.
Installation
npm install intouch-phone-input --save
Usage
import PhoneInput from "intouch-phone-input";
import "intouch-phone-input/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
Options
<PhoneInput
inputProps={{
name: "phone",
required: true,
autoFocus: true,
}}
/>
Contents
- Style
- Events
- Regions
- Localization
- Local area codes
- Custom masks
- Custom area codes
- Other props
- Custom localization
- Guides
- Contributing
Style
Events
onChange(value, country, e, formattedValue)
Country data object not returns from onKeyDown event
Regions
<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, tr
Turkish, id
Indonesian
hu
Hungarian, pl
Polish, ko
Korean
import es from "react-phone-input-2/lang/es.json";
<PhoneInput localization={es} />;
Local area codes
<PhoneInput
enableAreaCodes={true}
enableAreaCodes={["us", "ca"]}
enableAreaCodeStretch
/>
Flexible mask
If enableAreaCodeStretch
is added, the part of the mask with the area code will not stretch to length of the respective section of phone mask.
Example: +61 (2), +61 (02)
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
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, formattedValue) {
this.setState({ rawPhone: value.slice(data.dialCode.length) })
}
Check validity of the phone number
isValid(value, country, countries, hiddenAreaCodes)
<PhoneInput
isValid={(value, country) => {
if (value.match(/12345/)) {
return "Invalid value: " + value + ", " + country.name;
} else if (value.match(/1234/)) {
return false;
} else {
return true;
}
}}
/>
import startsWith from "lodash.startswith";
<PhoneInput
isValid={(inputNumber, country, countries) => {
return countries.some((country) => {
return (
startsWith(inputNumber, country.dialCode) ||
startsWith(country.dialCode, inputNumber)
);
});
}}
/>;
Clear country
To clear country
, pass null
as value
.
Dynamic placeholder
const phoneCountryFormat = useMemo(
() => phoneCountry?.format || undefined,
[phoneCountry]
);
const placeholder = useMemo(() => {
if (phoneCountryFormat) {
const words = phoneCountryFormat.split(" ");
words.shift(); // I'm using only local numbers so here I remove the country code from the format
let text = words.join(" ");
// first digit is special on french numbers, these 3 lines could be removed
if (country === "fr") {
text = text.replace(".", "6");
}
while (text.indexOf(".") > -1) {
text = text.replace(
".",
`${Math.min(9, Math.max(1, Math.floor(Math.random() * 10)))}`
);
}
return text;
}
return "";
}, [phoneCountryFormat, country]);
Based on react-phone-input-2