使用 yup 和 formik 进行密码验证
password validation with yup and 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" )
我无法获取密码变量的绑定以与密码对象绑定
我知道您可以将同一元素的验证链接在一起。如果您正在尝试进行交叉验证,那么本文会对您有所帮助。它是关于 formik 的反应,但我敢打赌它会让你知道如何解决你的案子。
https://itnext.io/simple-react-form-validation-with-formik-yup-and-or-spected-206ebe9e7dcc
只是为了详细说明 efleurine 的回答。
您不需要将每个验证都存储在同一个字段中——您可以将它们链接起来以获得完整的验证。
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.')
请注意您仍然可以为每次失败指定单独的消息。
此外,要使绑定生效,请确保您要绑定的表单输入具有适当的 name
属性 - 在本例中为 password
。
希望对您有所帮助:
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')
});
我为此使用 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');
在这个例子中,我正在验证最小字符数、小写和大写字符、数字和符号,但您可以添加或删除规范。例如,您可以设置最大字符数。
这个库的美妙之处在于您可以指定错误消息,它还可以为您处理特殊字符,这很棒,因为它可以让您免于使用 RegEx。玩得开心!
如何进行密码验证,同时将错误传递给不同的变量?
即
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" )
我无法获取密码变量的绑定以与密码对象绑定
我知道您可以将同一元素的验证链接在一起。如果您正在尝试进行交叉验证,那么本文会对您有所帮助。它是关于 formik 的反应,但我敢打赌它会让你知道如何解决你的案子。
https://itnext.io/simple-react-form-validation-with-formik-yup-and-or-spected-206ebe9e7dcc
只是为了详细说明 efleurine 的回答。
您不需要将每个验证都存储在同一个字段中——您可以将它们链接起来以获得完整的验证。
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.')
请注意您仍然可以为每次失败指定单独的消息。
此外,要使绑定生效,请确保您要绑定的表单输入具有适当的 name
属性 - 在本例中为 password
。
希望对您有所帮助:
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')
});
我为此使用 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');
在这个例子中,我正在验证最小字符数、小写和大写字符、数字和符号,但您可以添加或删除规范。例如,您可以设置最大字符数。
这个库的美妙之处在于您可以指定错误消息,它还可以为您处理特殊字符,这很棒,因为它可以让您免于使用 RegEx。玩得开心!