mapcomplete/UI/InputElement/Validators/PhoneValidator.ts

32 lines
960 B
TypeScript

import { parsePhoneNumberFromString } from "libphonenumber-js"
import { Validator } from "../Validator"
export default class PhoneValidator extends Validator {
constructor() {
super("phone", "A phone number", "tel")
}
isValid(str, country: () => string): boolean {
if (str === undefined) {
return false
}
if (str.startsWith("tel:")) {
str = str.substring("tel:".length)
}
let countryCode = undefined
if (country !== undefined) {
countryCode = country()?.toUpperCase()
}
return parsePhoneNumberFromString(str, countryCode)?.isValid() ?? false
}
reformat = (str, country: () => string) => {
if (str.startsWith("tel:")) {
str = str.substring("tel:".length)
}
return parsePhoneNumberFromString(
str,
country()?.toUpperCase() as any
)?.formatInternational()
}
}