
server에서 validation을 처리하면 delay가 발생한다.
- client에서 server로 갔다가 다시 돌아와서 오류메세지를 보여주기 때문이다.
- 따라서 client 단에서 form validation을 실행시켜서 한번 필터링을 해줘야 성능면에서 좋다.
html의 기본적인 validation인 Built-in form validation과 JS를 활용한 JS Validation이 존재한다.
- validation attributes
- required
- 해당 input이 필수임을 비어서는 안됨을 나타냄.
- :required가 설정됨. 비어있는데 보내면 :invalid도 함께 (:required의 반대는 :optional)
- minlength, maxlength
- textarea나 input의 길이를 제한한다.
- min, max
- number input의 수를 제한한다.
- 소수자리를 (step으로 바뀌는) 침법하게 입력하거나 최대값, 최소값 넘겨서 직접 입력 시키면 invalid
- pattern
- regular expression 사용
a, abc, ab?c, ab*c, a|b, abc|xyz, [aA]
- textarea는 지원 안함.
- empty되어 있지않고 regexps와 맞지 않으면 :invalid
- valid가 되면!
- :valid (CSS pseudo-class) 에 일치함.
- browser가 멈출게 있는지 확인한 후에 data를 server에 전송한다.
- invalid가 되면!
- :invalid (CSS pseudo-class)에 일치함. (상황에 따라 :out-of-range도)
JS Validation
-
Constraint Validation API
- DOM interface에는 validation과 관련된 method와 property가 존재한다.
validationMessage
- control이 뭐를 불만족하는지를 알려주는 메세지를 return
willvalidate 가 false (validation대상이 아님) 이거나 valid한 value를 갖고 있으면 return empty string
validity
ValidityState object를 뱉는다.
- patternMismatch
- tooLong
- tooShort
- rangeOverflow
- rangeUnderflow
- typeMismatch
- valid
- valueMissing
willValidate
checkValidity()
- valid > return
true
- statically validating the constraints
reportValidity()
- 모든 constraint failures를 return
true + 오류메세지
- interactively validating the constraints
setCustomValidity()
- error message 설정
- ex) file selector에서 .file.size를 이용하여 file size가 맞지 않으면 오류 메세지 설정 하는 식
- ValidityState interface
- validity property로 return된 object를 설명한다.
-
novalidate (form attribute)
- browser의 automatic validation을 끄는 기능
- 사용자 지정으로 구현할 수 있게 해준다. (constraint validation API를 막지 않고 CSS pseudo-class도 막지 않고 오직 browser의 automatic validation만 막기 때문이다.)
- error message bubble을 막는다.
- interactive validation이 일어나지 않는다고도 한다.
-
일일이 만드는 방법
- regexps의 경우 .test()를 이용해서 조건문에 넣어서 패턴일치를 파악할 수 있다.
- css에서 vaild class에 style을 넣는 방식으로 바꿔주고 일일이 js로 조건 쳐내가면 된다.
-
submit() 은 invalid해도 보내버린다. button에 click()하는 방법으로 해야됨.
-
visual styling of constraint validation
- 쓰이는 css pseudo-class들
- :optional, :required
- :placeholder-shown
- :valid, :invalid