Key Features
International phone input that's correct, beautiful, and ready out of the box
🌍
Searchable country dropdown
Pick a country by flag or calling code (+886, +66…), with preferred countries on top and A→Z ordering across all ~245 regions.
🔢
E.164 in/out
value / onChange always speak E.164 (+886912345678), so you can store it or send it to your backend with no extra conversion.
✅
Leveled validation
Three levels — strict / mobile-strict / loose — apply pattern or length checks to mobile and landline independently, with onValidityChange reporting live.
🎨
Themeable CSS
Every value is a CSS variable on .ripn-root with single-class, low-specificity selectors, so Tailwind utilities win without !important; or target parts via classNames.
🧩
Framework-agnostic
No antd, no UI-framework lock-in. The core validation logic (react-intl-phone-number/core) runs standalone on a backend or in forms — no React required.
🌐
Built-in i18n
Override every string with a messages object or your own t(key, vars) — reuse your existing react-i18next locale files as-is.
📞
Google-grade number rules
Parsing, formatting, and validation come from Google-maintained google-libphonenumber, kept in sync with each country's telecom authority — e.g. Malaysia's variable-length mobile numbers, or the UK / Canada re-allocating ranges for anti-fraud — so you track real-world changes without hand-maintaining regex.
⌨️
Controlled, accessible, error-aware
A fully controlled component with onBlur / disabled / inputRef and aria-label; after blur it can auto-show the validation error (showError → red border, role="alert", aria-invalid), plus a number-format hint tooltip.