Formik: λ§ˆμŠ€ν‚Ή 된 μž…λ ₯

에 λ§Œλ“  2018λ…„ 05μ›” 02일  Β·  9μ½”λ©˜νŠΈ  Β·  좜처: formium/formik

질문

Formikμ—μ„œ Mask μž…λ ₯ ν”ŒλŸ¬κ·ΈμΈ (예 : react-text-mask)을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

Question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@jaredpalmer κ°μ‚¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ—¬κΈ°μ„œ 그것을 μ•Œμ•„ λƒˆλ‹€. λˆ„κ΅¬λ“ μ§€ λ‚΄κ°€ μ–΄λ–»κ²Œν–ˆλŠ”μ§€λ³΄κ³  μ‹Άλ‹€λ©΄ ( react-text-mask ) :

      input = <Field name={name} render={({ field }) => {
        return <MaskedInput mask={Masks[mappedField.mask]}
            {...field}
            id={name}
            placeholder={mappedField.placeholder[language]} />
      }} />

λͺ¨λ“  9 λŒ“κΈ€

예, λ‹€λ₯Έ μ‚¬μš©μž μ •μ˜ μž…λ ₯처럼 μ·¨κΈ‰ν•©λ‹ˆλ‹€.

@jaredpalmer κ°μ‚¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ—¬κΈ°μ„œ 그것을 μ•Œμ•„ λƒˆλ‹€. λˆ„κ΅¬λ“ μ§€ λ‚΄κ°€ μ–΄λ–»κ²Œν–ˆλŠ”μ§€λ³΄κ³  μ‹Άλ‹€λ©΄ ( react-text-mask ) :

      input = <Field name={name} render={({ field }) => {
        return <MaskedInput mask={Masks[mappedField.mask]}
            {...field}
            id={name}
            placeholder={mappedField.placeholder[language]} />
      }} />

@ThiagoMiranda μ–΄λ–»κ²Œ 마슀크 된 λ¬Έμžμ—΄μ˜ μœ νš¨μ„±μ„ 검사 ν•  수 μžˆμ—ˆμŠ΅λ‹ˆκΉŒ?
예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό 같은 yup :

          passport: yup
            .string()
            .matches(/(^[0-9]+$)/, 'only digits here')
            .required('enter something')
            .min(4, 'Number of digits left: ' + digitsLeft)
            .max(4, 'This is too much')

λ‚˜λŠ” κ°’ "0___"을 μ–»κ³  μ΅œμ†Œ μ΅œλŒ€ κ·œμΉ™μ— λŒ€ν•΄ μœ νš¨μ„±μ„ 검사 ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

이것이 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 이유

λ§ˆμŠ€ν‚Ή 된 μž…λ ₯κ³Ό λ§ˆμŠ€ν‚Ή 및 λ Œλ”λ§μ΄ 잘 ν‘œμ‹œλ˜μ§€λ§Œ ν•„λ“œμ— 이름이 μžˆμ–΄λ„ values.maskedλ₯Ό μž…λ ₯ν•˜λ©΄ μ—…λ°μ΄νŠΈλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Field λŠ” field prop을 μ „λ‹¬ν•˜κΈ° λ•Œλ¬Έμ— Field MaskedInput λŠ” ν•Έλ“€λŸ¬μ— μ˜¬λ°”λ₯΄κ²Œ λ§€ν•‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ’‹μ•„μš”, ν•„λ“œ μ†Œν’ˆμ΄ ν•„λ“œμ˜ μ•Œ μˆ˜μ—†λŠ” μ†Œν’ˆμ„ λͺ¨λ‘ ν¬ν•¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@yyynnn- 같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 마슀크 문자λ₯Ό μ œκ±°ν•˜κ³  Formik의 setFieldValue μˆ˜λ™ ν˜ΈμΆœμ„ μ œκ±°ν•˜λŠ” μ‚¬μš©μž 지정 λ³€κ²½ 처리기λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

handleChange = (event, field, form, charsToStrip) => {
  const cleanValue = stripCharacters(event.target.value, charsToStrip)
  form.setFieldValue(field.name, cleanValue)
}

function stripCharacters (string, characters) {
  const re = new RegExp(`[${characters}]+`, 'g')
  return string.replace(re, '')
}

@ThiagoMiranda μ–΄λ–»κ²Œ 마슀크 된 λ¬Έμžμ—΄μ˜ μœ νš¨μ„±μ„ 검사 ν•  수 μžˆμ—ˆμŠ΅λ‹ˆκΉŒ?
...
λ‚˜λŠ” κ°’ "0___"을 μ–»κ³  μ΅œμ†Œ μ΅œλŒ€ κ·œμΉ™μ— λŒ€ν•΄ μœ νš¨μ„±μ„ 검사 ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

@jaredpalmer κ°μ‚¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ—¬κΈ°μ„œ 그것을 μ•Œμ•„ λƒˆλ‹€. λˆ„κ΅¬λ“ μ§€ λ‚΄κ°€ μ–΄λ–»κ²Œν–ˆλŠ”μ§€λ³΄κ³  μ‹Άλ‹€λ©΄ ( react-text-mask ) :

λ‚˜λ„μ΄ 일
<Field name='telefone' > {({ field }) => ( <MaskedInput mask={['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]} {...field} placeholder='Telefone' className="form-control" /> )} </Field>

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰