programing

일치 문제를 사용한 regex에서의 Yup 유효성 검사

elseif 2023. 2. 23. 22:06

일치 문제를 사용한 regex에서의 Yup 유효성 검사

Yup을 사용한 인증은 다음과 같습니다.

const myValidtion = yup
.string()
.trim()
.matches(/[abcdefghijklmnopqrstuvwxyz]+/ , 'Is not in correct format')
.required();

이것으로, 이것은 통과합니다.hello world역시나하지만 나를 혼란스럽게 하는 것은 왜 이 또한 통과할 것인가 하는 것이다.hello WORLD또는 이것도 통과합니다.hello ,&$#$ world

한편, 다음과 같은 비활성 문자만 입력하면*%$&#$($#이것은 통과되지 않고 나에게 오류를 보여줄 것이다.이렇게 하면 모든 엔트리가 유효하지 않은 경우에만 오류가 발생합니다.

사용자가 예를 들어 다음과 같이 입력한 경우 Yup matchs 메서드를 사용하여 NOT pass로 만드는 방법을 알아보겠습니다.hello ,*&) world

누가 나 좀 도와줄래?

정규식은 스트링 전체를 커버해야 합니다.^그리고.$문자열의 시작과 끝을 나타냅니다.

/^[abcdefghijklmnopqrstuvwxyz]+$/

그렇지 않으면 문자열의 일부와 일치하기 때문에 좋은 문자와 나쁜 문자가 혼재되어 있을 때는 일치하지만 모든 문자가 올바르지 않을 때는 실패합니다.

다음과 같은 문자 범위를 사용하여 정규식을 단축할 수 있습니다.

/^[a-z]+$/

온라인 도구를 사용하여 정규식을 빌드하고 테스트할 수 있습니다.

이 방법은 효과가 있었습니다.

const validationSchema = yup.object().shape({
  password: yup
    .string()
    .required("Please enter your password")
    .matches(
      /^.*(?=.{8,})((?=.*[!@#$%^&*()\-_=+{};:,<.>]){1})(?=.*\d)((?=.*[a-z]){1})((?=.*[A-Z]){1}).*$/,
      "Password must contain at least 8 characters, one uppercase, one number and one special case character"
    ),
  confirmPassword: yup
    .string()
    .required("Please confirm your password")
    .oneOf([yup.ref('password'), null], "Passwords don't match.")
});

정규식 분석:

(?=.{8,}): 최소 문자 수 설정

(?=.[!@#$%^&()-=+{};:,<.>){1}: 목록에 적어도 1개의 문자가 있는지 확인합니다!@#$%^&*()-=+{};:,<.>"

(?=.*\d): 숫자가 있는지 확인합니다.

((?=.*[a-z]){1}: 알파벳 소문자가 있는지 확인합니다.

((?=.*[A-Z]){1}: 알파벳 대문자가 있는지 확인합니다.

regex 코드는 https://regex101.com/r/rYT2yE/1 에서 테스트할 수 있습니다.

언급URL : https://stackoverflow.com/questions/54405911/yup-validation-with-regex-using-matches-problem