使用yup和formik进行密码验证

Str*_*vaz 5 javascript yup formik

如何进行密码验证,但同时又将错误传递给不同的变量呢?

password: Yup.string().required("Please provide a valid password"),
passwordMin: Yup.string().oneOf([Yup.ref('password'), null]).min(8, 'Error'),
passwordLC: Yup.string().oneOf([Yup.ref('password'), null]).matches(/[a-z]/, "Error" )
passwordUC: Yup.string().oneOf([Yup.ref('password'), null]).matches(/[A-Z]/, "Error" )
Run Code Online (Sandbox Code Playgroud)

我无法获取密码变量与密码对象的绑定

ano*_*ewb 28

希望这可以帮助:

import * as Yup from 'yup';

validationSchema: Yup.object({
  password: Yup.string().required('Password is required'),
  passwordConfirmation: Yup.string()
     .oneOf([Yup.ref('password'), null], 'Passwords must match')
});
Run Code Online (Sandbox Code Playgroud)


Ale*_*ira 18

我为此使用yup-password 。例子:

import * as Yup from 'yup';
import YupPassword from 'yup-password';
YupPassword(Yup);

const requiredField = () => Yup.string().required('required');    
const passwordField = () =>
  requiredField()
    .min(
      8,
      'password must contain 8 or more characters with at least one of each: uppercase, lowercase, number and special'
    )
    .minLowercase(1, 'password must contain at least 1 lower case letter')
    .minUppercase(1, 'password must contain at least 1 upper case letter')
    .minNumbers(1, 'password must contain at least 1 number')
    .minSymbols(1, 'password must contain at least 1 special character');
Run Code Online (Sandbox Code Playgroud)

在此示例中,我将验证最小字符数、小写和大写字符、数字和符号,但您可以添加或删除规范。例如,您可以设置最大字符数。

这个库的优点在于您可以指定错误消息,并且它还可以为您处理特殊字符,这很棒,因为它可以让您免于使用 RegEx。玩得开心!


VBo*_*off 7

只是为了详细说明头孢菌碱的答案。
您无需将每个验证都存储在同一字段上-您可以将它们链接以获得完整的验证。

password: Yup.string()
  .required('No password provided.') 
  .min(8, 'Password is too short - should be 8 chars minimum.')
  .matches(/[a-zA-Z]/, 'Password can only contain Latin letters.')
Run Code Online (Sandbox Code Playgroud)

请注意如何仍可以为每个失败指定单独的消息。
另外,为使绑定生效,请确保要绑定的表单输入具有适当的name属性-在这种情况下为password


小智 5

import * as yup from "yup";

const passwordRules = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{5,}$/;
// min 5 characters, 1 upper case letter, 1 lower case letter, 1 numeric digit.

export const basicSchema = yup.object().shape({
  email: yup.string().email("Please enter a valid email").required("Required"),
  age: yup.number().positive().integer().required("Required"),
  password: yup
    .string()
    .matches(passwordRules, { message: "Please create a stronger password" })
    .required("Required"),
  confirmPassword: yup
    .string()
    .oneOf([yup.ref("password"), null], "Passwords must match")
    .required("Required"),
});
Run Code Online (Sandbox Code Playgroud)