25 lines
858 B
TypeScript
25 lines
858 B
TypeScript
import { z } from 'zod';
|
||
|
||
/**
|
||
* Vietnamese phone number rule:
|
||
* - 9–11 digits, optional leading +84 or 0.
|
||
* We keep validation pragmatic: whitespace is stripped, then the remaining
|
||
* string must be 9–11 digits (country code / leading zero stripped).
|
||
*/
|
||
const PHONE_REGEX = /^(?:\+?84|0)?\d{9,11}$/;
|
||
|
||
export const inquiryFormSchema = z.object({
|
||
message: z
|
||
.string({ error: 'Vui lòng nhập nội dung tin nhắn' })
|
||
.trim()
|
||
.min(1, 'Vui lòng nhập nội dung tin nhắn')
|
||
.max(2000, 'Tin nhắn không được vượt quá 2000 ký tự'),
|
||
phone: z
|
||
.string({ error: 'Vui lòng nhập số điện thoại' })
|
||
.trim()
|
||
.min(9, 'Vui lòng nhập số điện thoại hợp lệ')
|
||
.regex(PHONE_REGEX, 'Số điện thoại không hợp lệ'),
|
||
});
|
||
|
||
export type InquiryFormData = z.infer<typeof inquiryFormSchema>;
|