내일배움캠프 13주차 TIL

내일배움캠프 13주차 TIL (13-1) 유효성검사

YOOYOUNGJAE 2023. 1. 25. 22:53
728x90

유효성 검사를하기위해서는 3가지의 상태가필요하다

 //user정보
    const [name, setName] = useState("")
    const [nickName, setNickName] = useState("")
    const [age, setAge] = useState("")
    const [id, setId] = useState("")
    const [password, setPassword] = useState("")
    const [passwordConfirm, setPasswordConfirm] = useState("")
    const [email, setEmail] = useState("")

    //오류메시지 상태저장
    const [nameMessage, setNameMessage] = useState("")
    const [nickNameMessage, setNickNameMessage] = useState("")
    const [emailMessage, setEmailMessage] = useState("")
    const [passwordMessage, setPasswordMessage] = useState("")
    const [idMessage, setidMessage] = useState("")
    const [passwordConfirmMessage, setPasswordConfirmMessage] = useState("")

    //유효성검사
    const [isName, setIsName] = useState(false)
    const [isNickName, setIsNickName] = useState(false)
    const [isEmail, setIsEmail] = useState(false)
    const [isId, setIsid] = useState(false)
    const [isPassword, setIsPassword] = useState(false)
    const [isPasswordConfirm, setIsPasswordConfirm] = useState(false)

표현식으로는 정규표현식을 사용하며

useCallback을 사용 if문을 적용하여 어떤 문구를 띄울것인가 정의를해준다

이또한  state에 값을 넣어줘야한다

 const idHandler = useCallback((e) => {
        const idRegex = /^(?=.*[a-zA-Z])(?=.*[0-9]).{8,25}$/
        const idCurrent = e.target.value
        setId(idCurrent)

        if (!idRegex.test(idCurrent)) {
            setidMessage("숫자+영문자 조합으로 8자리 이상 입력해주세요!")
            setIsid(false)
        } else {
            setidMessage("완벽한 아이디에요 : )")
            setIsid(true)
        }
    }, [])

비밀번호를 입력하는곳에서 는 페스워드가 true, false값을 가지고있어야하며

이것으로 인풋태그하단에 입력이 올바르게되었는지 알림을줄수있다

 <StInput
                    placeholder="비밀번호를 입력하세요."
                    type="password"
                    value={password}
                    onChange={passwordHandler}
                    passwordText="비밀번호 (숫자+영문자+특수문자 조합으로 8자리 이상)"
                />
                {password?.length > 0 && (
                    <Colortext
                        className={`message ${
                            isPassword ? "success" : "error"
                        }`}
                    >
                        {passwordMessage}
                    </Colortext>
                )}

프로젝트를하면 항상 메인페이지나 ui적인부분들만 만들었는데

이번에는 내가직접만들어본것이 처음인거같다

axios db.json 에 데이터를 보내고 다시 그데이터를가져와서 가공까지하는것을

배웠기에 이번주차는 무언가더 발전한느낌이 들어서 기분이좋다

 

프로젝트발포 d -4일전

728x90