Да, подтвердите пароль, содержащий хотя бы один специальный символ - PullRequest
1 голос
/ 29 мая 2020

Я использую следующее:

export const validationSchema = Yup.object().shape({
  password: Yup.string()
    .required('Password is required')
    .matches(
      /^[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/,
      'Need one special character',
    ),
  confirmPassword: Yup.string()
    .oneOf([Yup.ref('password'), null], 'Passwords must match')
    .required('Password confirm is required'),
});

, чтобы проверить, есть ли один специальный символ в строке пароля.

@ => valid
@a => invalid
a@ => invalid
aa => invalid, of course

Я также проверяю шаблон регулярного выражения в Интернете, чтобы убедиться, что этот шаблон поймает любой специальный символ в строке. Интересно, это может быть ошибка или я делаю что-то не так

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вы можете попробовать следующее регулярное выражение:

^[0-9A-Za-z]*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?][0-9a-zA-Z]*$

Объяснение приведенного выше регулярного выражения:

^, $ - Соответствует началу и концу данной строки, соответственно.

[0-9A-Za-z]* - Соответствует любому символу в заданном диапазоне ноль или более раз.

[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?] - соответствует ровно одному специальному символу из данного набора.

Вы можете найти демонстрацию регулярных выражений здесь.

1 голос
/ 29 мая 2020

Вы можете попробовать использовать следующий шаблон регулярного выражения:

^.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?].*$

Это просто соответствует любому вводу, если он имеет специальный символ. Ваш обновленный код React:

export const validationSchema = Yup.object().shape({
    password: Yup.string()
       .required('Password is required')
       .matches(
           /^.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?].**$/,
          'Need one special character',
       ),
   confirmPassword: Yup.string()
      .oneOf([Yup.ref('password'), null], 'Passwords must match')
    .required('Password confirm is required'),
});
...