Files
Inventory/app/shared/validation/phone.ts
2025-09-25 14:44:42 +02:00

37 lines
1.0 KiB
TypeScript

import { normalizePhone } from '~/utils/formatters/phone'
/** Pattern used for the HTML input `pattern` attribute on phone fields. */
export const PHONE_INPUT_PATTERN = '[0-9+ ]*'
const PHONE_VALIDATION_PATTERN = /^\+?\d{7,15}$/
export type PhoneValidationResult = {
valid: boolean
error?: string
}
export const PHONE_VALIDATION_ERROR = 'Numéro de téléphone invalide'
/**
* Lightweight phone schema mirroring the API used across the app.
*/
export const phoneSchema = {
pattern: PHONE_VALIDATION_PATTERN,
message: PHONE_VALIDATION_ERROR,
validate(value: string): PhoneValidationResult {
const normalized = normalizePhone(value)
if (!normalized) {
// Empty values are considered valid; required-ness is handled by the caller.
return { valid: true }
}
if (PHONE_VALIDATION_PATTERN.test(normalized)) {
return { valid: true }
}
return { valid: false, error: PHONE_VALIDATION_ERROR }
},
}
export const isPhoneValid = (value: string): boolean => phoneSchema.validate(value).valid