首页 > 解决方案 > 编写一个匹配至少 x 个前瞻条件的正则表达式

问题描述

我正在为一个表单编写验证yup

const ValidationSchema = Yup.object().shape({
  password: Yup.string()
    .matches(/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$/, {
      message:
        "Must be at least 8 characters long, contain a lowercase letter, an uppercase letter, and a number."
    })
    .min(8, "Must be at least 8 characters long.")
    .matches(/(?=.*[a-z])/, { message: "Must contain a lowercase letter." })
    .matches(/(?=.*[A-Z])/, { message: "Must contain an uppercase letter." })
    .matches(/(?=.*\d)/, { message: "Must contain a number." })
    .required("Password is required."),
  passwordConfirmation: Yup.string()
    .oneOf([Yup.ref("password"), null], "Passwords don't match.")
    .required("Password confirmation is required.")
});

如果至少有 2 个错误,则应显示第一条验证消息 ( "Must be at least 8 characters long, contain a lowercase letter...)。否则,它应该回退到任何其他验证消息。

如何才能做到这一点?目前,始终显示多重验证错误(仅在至少有 2 个错误时才显示)。我不是正则表达式的大师,所以任何帮助表示赞赏。

标签: regexyup

解决方案


推荐阅读