
zod email check on Input with invalid address FieldError message.
@shadcnblocks
example/form/form-validation-3.tsx
"use client";
import { zodResolver } from "@hookform/resolvers/zod";
import { Controller, useForm } from "react-hook-form";
import { z } from "zod";
import { Button } from "@/components/ui/button";
import {
Field,
FieldDescription,
FieldError,
FieldGroup,
FieldLabel,
} from "@/components/ui/field";
import { Input } from "@/components/ui/input";
export const title = "Email Validation";
const formSchema = z
.object({
email: z
.string()
.min(1, "Email is required")
.email("Please enter a valid email address"),
confirmEmail: z
.string()
.min(1, "Please confirm your email")
.email("Please enter a valid email address"),
})
.refine((data) => data.email === data.confirmEmail, {
message: "Emails don't match",
path: ["confirmEmail"],
});
const Example = () => {
const form = useForm<z.infer<typeof formSchema>>({
resolver: zodResolver(formSchema),
defaultValues: {
email: "",
confirmEmail: "",
},
});
function onSubmit(values: z.infer<typeof formSchema>) {
console.log(values);
}
return (
<div className="w-full max-w-md">
<form className="space-y-4" onSubmit={form.handleSubmit(onSubmit)}>
<FieldGroup>
<Controller
name="email"
control={form.control}
render={({ field, fieldState }) => (
<Field data-invalid={fieldState.invalid}>
<FieldLabel htmlFor={field.name}>Email</FieldLabel>
<Input
{...field}
id={field.name}
aria-invalid={fieldState.invalid}
className="bg-background"
placeholder="you@example.com"
type="email"
/>
<FieldDescription>Enter your email address.</FieldDescription>
{fieldState.invalid && (
<FieldError errors={[fieldState.error]} />
)}
</Field>
)}
/>
<Controller
name="confirmEmail"
control={form.control}
render={({ field, fieldState }) => (
<Field data-invalid={fieldState.invalid}>
<FieldLabel htmlFor={field.name}>Confirm Email</FieldLabel>
<Input
{...field}
id={field.name}
aria-invalid={fieldState.invalid}
className="bg-background"
placeholder="you@example.com"
type="email"
/>
<FieldDescription>
Re-enter your email to confirm.
</FieldDescription>
{fieldState.invalid && (
<FieldError errors={[fieldState.error]} />
)}
</Field>
)}
/>
</FieldGroup>
<Button type="submit">Continue</Button>
</form>
</div>
);
};
export default Example;






























