forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			32 lines
		
	
	
	
		
			960 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			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()
 | |
|     }
 | |
| }
 |