Skip to content

Instantly share code, notes, and snippets.

@ramziddin
Last active January 12, 2025 19:17
Show Gist options
  • Save ramziddin/8a7699ec635c74ea0cd903461d6cb23c to your computer and use it in GitHub Desktop.
Save ramziddin/8a7699ec635c74ea0cd903461d6cb23c to your computer and use it in GitHub Desktop.
Uzbekistan phone number input component
import { ComponentProps, useState } from "react"
function PhoneInput(props: ComponentProps<"input">) {
const [value, setValue] = useState<string>("+998")
const formattedValue = value
.replaceAll(" ", "") // remove whitespace
.slice(4) // strip the country code
.match(/(\d{1,2})?(\d{1,3})?(\d{1,2})?(\d{1,2})?/)! // split into multiple components
.toSpliced(0, 1, "+998") // replace global match with country code
.filter(Boolean) // remove empty components
.join(" ") // convert array back to string joined by spaces
return (
<input
value={formattedValue}
onChange={(event) => {
setValue(event.target.value)
}}
inputMode="tel"
{...props}
/>
)
}
@ramziddin
Copy link
Author

Make sure compilerOptions.lib contains "ESNext" in your tsconfig.json

@ramziddin
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment