- パスワードの大文字を検証するカスタムバリデーションルールの作成
React Hook Formでは、カスタムバリデーションルールを作成して使用することができます。まず、以下のようなカスタムバリデーションルールを作成します。
import { useForm } from 'react-hook-form';
const App = () => {
const { register, handleSubmit, errors } = useForm();
const validatePassword = (value) => {
if (!/[A-Z]/.test(value)) {
return 'パスワードには大文字が必要です';
}
return true;
};
const onSubmit = (data) => {
// フォームの送信処理
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input type="password" name="password" ref={register({ validate: validatePassword })} />
{errors.password && <p>{errors.password.message}</p>}
<input type="submit" value="送信" />
</form>
);
}
export default App;
上記の例では、validatePassword
というカスタムバリデーションルールを作成しています。正規表現/[A-Z]/
を使用して、値(パスワード)に大文字が含まれているかどうかをチェックしています。含まれていない場合はエラーメッセージを返し、含まれている場合はtrue
を返します。
- Yupスキーマバリデーションライブラリを使用する
React Hook FormはYupと組み合わせて使用することもできます。Yupは強力なスキーマバリデーションライブラリであり、パスワードの大文字検証にも便利です。
まず、Yupをインストールします。
npm install yup
次に、以下のようにYupを使用してパスワードのバリデーションスキーマを作成します。
import { useForm } from 'react-hook-form';
import * as yup from 'yup';
const schema = yup.object().shape({
password: yup.string().required('パスワードを入力してください').matches(/[A-Z]/, 'パスワードには大文字が必要です'),
});
const App = () => {
const { register, handleSubmit, errors } = useForm({
resolver: yupResolver(schema),
});
const onSubmit = (data) => {
// フォームの送信処理
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input type="password" name="password" ref={register} />
{errors.password && <p>{errors.password.message}</p>}
<input type="submit" value="送信" />
</form>
);
}
export default App;
上記の例では、Yupを使用してスキーマを作成し、resolver
オプションを使用してReact Hook Formに統合しています。matches
メソッドを使用して、パスワードに大文字が含まれているかどうかを検証しています。