[๐Ÿงธ] ์˜ํ™” ํ‰/๋ฆฌ๋ทฐ ์‚ฌ์ดํŠธ : ํšŒ์›๊ฐ€์ž…

Yunhye Parkยท2023๋…„ 11์›” 6์ผ
0
post-thumbnail
post-custom-banner

๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•  ์ƒ๊ฐ์œผ๋กœ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•œ์ฐธ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ ์•„์ฐจ ํ–ˆ๋‹ค. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ํšŒ์›๊ฐ€์ž… ํ•  ๋•Œ ์ˆ˜ํ–‰ํ•œ๋‹ค.. ๊ฒฐ๊ตญ ํšŒ์›๊ฐ€์ž… ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋จผ์ € ํ•ด๋ณด๊ธฐ๋กœ.

์œ ์ €์˜ ํšŒ์›๊ฐ€์ž… ํผ์€ ์—ฌ๋Ÿฌ ์ •๋ณด(ex. ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ ๋“ฑ)๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๊ทธ๋งŒํผ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์ง„๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ด๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ state๋กœ ๋งŒ๋“ค๋ฉด ์ž…๋ ฅ๊ฐ’๋งˆ๋‹ค ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋งŽ์€ input์„ ์ •๊ฐˆํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์ปค์Šคํ…€ ํ›… ๋งŒ๋“ค์–ด์„œ ํ•ด๋ณด๋ผ๋Š”๋ฐ

๋ฆฌ์•กํŠธ๋Š” ์ž์œ ๋„๊ฐ€ ๊ฝค ๋†’์€ ๊ฒƒ ๊ฐ™๋‹ค. ๋ฆฌ์•กํŠธ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํƒœ๊ทธ๋กœ ๋งŒ๋“œ๋Š”๋ฐ, hook๋งˆ์ € ์‚ฌ์šฉ์ž ๋งˆ์Œ๋Œ€๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

state๋ฅผ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์žฌ์‚ฌ์šฉํ•˜๋ ค๋ฉด?

  1. ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ : props ์‚ฌ์šฉ
  2. Custom hook : ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋กœ ์ „๋‹ฌํ•ด ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ๊ฐ ์ปดํฌ๋„ŒํŠธ์—์„œ state ์ƒ์„ฑ (๋…๋ฆฝ์ )

๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ๋…๋ฆฝ์„ฑ ์œ ๋ฌด๋‹ค. props๋Š” ํ•„์—ฐ์ ์œผ๋กœ ์ƒ์œ„์—์„œ ํ•˜์œ„๋กœ๋งŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜๋“œ์‹œ '์ „๋‹ฌ'์„ ํ†ตํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ปค์Šคํ…€ ํ›…์€ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ฐ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ state๋ฅผ ๋งŒ๋“ ๋‹ค.

React Custom Hook ๊ฐ„๋‹จ ์‚ฌ์šฉ๋ฒ•

  1. js ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด function์œผ๋กœ hook ์ž‘์„ฑ ๋ฐ export
export default function ValidCheck () {
 const [isValid, setValid] = useState({
 	isEmail: false,
 	isPw: false
 });
                                         
    useEffect(() => {
    // ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ์ด๋ฉ”์ผ ์œ ํšจ์„ฑ ํ™•์ธ})
}, [์ด๋ฉ”์ผ ๋””ํŽœ๋˜์‹œ]);
  
  	useEffect(() => {
    // ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ์œ ํšจ์„ฑ ํ™•์ธ
}, [๋น„๋ฐ€๋ฒˆํ˜ธ ๋””ํŽœ๋˜์‹œ]);
  1. app.js์—์„œ import
import useValid from '๊ฒฝ๋กœ'

function SignUp () {
  	const [inputs, setInputs] = useState({
    	email: '',
    	emailValid: false,
    	pw: '',
    	pwValid: false
  }
                                         
    const {isValid} = useValid(inputs);
}

๊ทธ๋Ÿฐ๋ฐ ๊ตฌํ˜„ ๊ณผ์ •์—์„œ ์ž๊พธ ๋ง‰ํ˜”๋‹ค. useEffect๋Š” ํŠน์ • ์‹œ์ ์— ํŠน์ • state ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ์— ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๋กœ ์•ˆ๋‹ค. ์ด ๋ชฉ์ ์— ๋ถ€ํ•ฉํ•˜๋Š” ์“ฐ์ž„์ด๊ธด ํ•œ๋ฐ ์™•์ดˆ๋ณด์—๊ฒ ์ฒ˜์Œ๋ถ€ํ„ฐ ํŒŒ์ผ์„ ๋‚˜๋ˆ  ์ ‘๊ทผํ•˜๋Š” ๊ฒŒ ๋ฒ„๊ฑฐ์› ๋‹ค.

์ฐธ๊ณ ํ•œ ํฌ์ŠคํŒ…์˜ ๋ชฉ์ ์€ ๋” ๊น”๋”ํ•˜๊ฒŒ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ•˜๋Š” ๊ฑฐ์˜€์œผ๋‹ˆ ์ง€๊ธˆ ๋‚˜์—๊ฒ ๋งž์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋ž€ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

  1. ์ผ๋‹จ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ฒŒ ์ฒซ ๋ชฉํ‘œ
  2. input ์—ฌ๋Ÿฌ ๊ฐœ ํ•  ์ƒ๊ฐ ๋ง๊ณ  ์ผ๋‹จ ์ด๋ฉ”์ผ ํ•˜๋‚˜๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•ด๋ณด์ž

๋ชฉํ‘œ ์ˆ˜์ •!

๐Ÿค” cf. '์ƒํƒœ ๊ด€๋ฆฌ' ์–ธ๊ธ‰์— ๋Œ€ํ•œ ํ˜ธ๊ธฐ์‹ฌ

๋ฆฌ์•กํŠธ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ํˆด๋กœ redux๋ฅผ ์ค„๊ณง ์‚ฌ์šฉํ•ด์™”๋‹ค๋Š” ๋ง์„ ๋ดค๋Š”๋ฐ, ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋ญ”์ง€ ์•„๋ฆฌ์†กํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์–ด๋–ค ํฌ์ŠคํŒ…์„ ์ฝ๋˜ ์ค‘ ์ƒํƒœ๋Š” ๋‹จ์ˆœํžˆ state๋ฅผ ๋ฒˆ์—ญํ•œ ๋ง์ผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๊ณ  ๊นจ๋‹ฌ์•˜๋‹ค. ๋ฐฐ์šฐ์ง€ ์•Š์€ ์ƒˆ๋กœ์šด ๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ.

๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ํ™”๋ฉด์—์„œ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๋‚ด์šฉ์ด ์žฆ์•„์งˆ ํ…Œ๊ณ , ๊ทธ๋งŒํผ state ์‚ฌ์šฉ์ด ๋งŽ์œผ๋ฉด ๋ญ๊ฐ€ ๋ญ”์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฑฐ๋‹ค. ๋ณ€์ˆ˜ ์„ ์–ธ๋งŒ ํ•œ์ฐธ ๋ณด์•„์•ผ ํ• ์ง€๋„.. ๊ทธ ๊ด€๋ฆฌ๋ฅผ ๋„์™€์ฃผ๋Š” ๊ฒŒ redux์ผ๊นŒ ๊ทธ๋Ÿผ?

๊ด€๋ จ ๋‚ด์šฉ์„ ์•„์ง์€ ์ฐพ์•„๋ณด์ง„ ์•Š์•˜๋‹ค. ์ง„์งœ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ฐพ์•„๋ณด๊ณ  ์ ์šฉํ•ด์•ผ ๋น„๋กœ์†Œ ํ”์ ์ด ๋‚จ๋Š” ๋“ฏํ•˜๋‹ค. ๊ทธ๋ƒฅ ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ ๋ฌผ๋“ฏ ์ฐพ๋Š” ๊ฑด ๊ฒฝํ—˜ ์ถ•์ ์— ํฐ ๋„์›€์ด ๋  ์ˆ˜ ์—†๋‹ค๊ณ  ๋Š๋‚€๋‹ค.

ํ•  ์ผ ์ •๋ฆฌ

๋ชฉ์ 

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•œ ์ด๋ฉ”์ผ๋กœ๋งŒ ๊ฐ€์ž… ํ—ˆ์šฉ

๊ตฌํ˜„ ๋‚ด์šฉ

์œ ์ €๊ฐ€ ์ด๋ฉ”์ผ input์— ์ž…๋ ฅํ•œ ๊ฐ’์ด ์ด๋ฉ”์ผ ํ˜•์‹์— ๋งž์ง€ ์•Š์œผ๋ฉด ์ œ๋Œ€๋กœ ์ž…๋ ฅํ•˜๋ผ๋Š” ์ž”์†Œ๋ฆฌ๋ฅผ ๋‹ด์•„ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๋ฅผ ๋„์›Œ์ค€๋‹ค. ํ˜•์‹์„ ๊ฐ–์ถ”๋ฉด ํ•ด๋‹น ๋ฌธ๊ตฌ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋œ๋‹ค.

๋กœ์ง ์งœ๋ณด๊ธฐ

  1. form์— ๋“ค์–ด๊ฐˆ input์„ state๋กœ ์ž‘์„ฑ
    โœ”๏ธ ์™œ? ์ž์ฃผ ๋ฐ”๋€Œ๋Š” ๊ฐ’์ด๋‹ˆ๊นŒ ๋ณ€ํ™”ํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™ ์žฌ๋ Œ๋”๋ง ํ•ด์ฃผ๋Š” state ์‚ฌ์šฉ
  2. ์ •๊ทœํ‘œํ˜„์‹ ์ž‘์„ฑ
  3. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ณ„ ์‘๋‹ต ์ž‘์„ฑ
    โœ”๏ธ ์œ ์ €๊ฐ€ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ด ์ •๊ทœํ‘œํ˜„์‹๊ณผ ๋งž์ง€ ์•Š์œผ๋ฉด ์•ˆ๋‚ด ๋ฌธ๊ตฌ
    โœ”๏ธ ์ œ๋Œ€๋กœ ์ž‘์„ฑํ•˜๋ฉด ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์—†์ด ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ ํ™œ์„ฑํ™”
  4. css ๊ฐ€๋ณ๊ฒŒ ๊พธ๋ฉฐ์ฃผ๊ธฐ

์ด๋ฒˆ ๊ธฐํšŒ์— ์ œ๋Œ€๋กœ ์งš๊ณ  ๋„˜์–ด๊ฐ„ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ดํŽด๋ณด์ž.

์ •๊ทœ ํ‘œํ˜„์‹ - ์ด๋ฉ”์ผ

์ •๊ทœํ‘œํ˜„์‹์€ ์Šฌ๋ž˜์‹œ(/) ์‚ฌ์ด์— patern์„ ์ž‘์„ฑํ•œ๋‹ค. ๋งค์นญ ํŒจํ„ด, ๊ฒ€์ƒ‰ ํŒจํ„ด ๋“ฑ ๋‹ค์–‘ํ•œ ๋‚ด์šฉ์„ ํ‘œ๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค์ง€๋งŒ, ๊ทธ๊ฑธ ๋งˆ๋ƒฅ ์ฝ๊ณ  ์™ธ์šฐ๋Š” ๊ฑด ์•„๋ฌด ์˜๋ฏธ ์—†๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ฉ”์ผ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์˜ˆ๋กœ ํ•˜๋‚˜์”ฉ ๋œฏ์–ด๋ณด์ž.

const emailReg = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/

์•ž์„œ ๋งํ•œ ๋Œ€๋กœ ์Šฌ๋ž˜์‹œ๊ฐ€ ์‹œ์ž‘๊ณผ ๋์— ๋†“์˜€๋‹ค.

  • ^ : ๋ฌธ์ž์—ด ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • $ : ๋ฌธ์ž์—ด ๋์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

[A-Za-z0-9._%+-]+
๋Œ€๊ด„ํ˜ธ ์•ˆ์€ ๋ฌธ์ž ์…‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋Œ€๊ด„ํ˜ธ์— ๋“ค์–ด๊ฐ„ ๋ชจ๋“  ๋ฒ”์ฃผ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž, ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž, ์ˆซ์ž, ๊ทธ๋ฆฌ๊ณ  ํŠน์ˆ˜๋ฌธ์ž๋“ค ๋ช‡๋ช‡(._%_-)์„ ํ—ˆ์šฉํ•œ๋‹ค.
๋งˆ์ง€๋ง‰์— ๋‹ฌ๋ฆฐ ํ”Œ๋Ÿฌ์Šค ๊ธฐํ˜ธ๋Š” 1๊ฐœ ์ด์ƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰ [~~] ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ 1๊ฐœ ์ด์ƒ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

@[A-Za-z0-9.-]+
์ด๋ฉ”์ผ์—” ๋‹น์—ฐํžˆ @๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋‹ˆ๊นŒ ์ ์–ด์คฌ๋‹ค. ๊ทธ ๋’ท๋ถ€๋ถ„์€ ๊ฑฐ์˜ ์„ค๋ช…ํ–ˆ๋‹ค. ์˜์–ด ๋Œ€๋ฌธ์ž, ์˜์–ด ์†Œ๋ฌธ์ž, ๋ฌธ์ž์™€ ๋งˆ์นจํ‘œ(.) ํ•˜์ดํ”ˆ(-)์„ 1๊ฐœ ์ด์ƒ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

\.[A-Za-z]{2,}
๋„๋ฉ”์ธ์—์„œ ๋งˆ์นจํ‘œ๋Š” @์ฒ˜๋Ÿผ ํ•„์ˆ˜ ์š”์†Œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ƒ…๋‹ค .์„ ์ž‘์„ฑํ•˜๋ฉด ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•œ ์ค„ ์•ˆ๋‹ค. ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ, ๋ฌธ์ž๋ผ๋Š” ๊ฑธ ํ‹ฐ๋‚ด๊ธฐ ์œ„ํ•ด ๋ฐฑ์Šฌ๋ž˜์‹œ()๋ฅผ ์•ž์— ๋‹ฌ์•„์ฃผ์—ˆ๋‹ค. ์ค‘๊ด„ํ˜ธ{}์•ˆ์—๋Š” ์ตœ์†Œ ๊ฐœ์ˆ˜์™€ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์ฒ˜๋Ÿผ ์ตœ์†Œ ๊ฐœ์ˆ˜๋งŒ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋งŒ ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด ๊ฑฐ๊พธ๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ex. {,10}

๐Ÿ™‹ ๋Œ€๊ด„ํ˜ธ ์•ˆ (-)์—๋Š” ๋ฐฑ์Šฌ๋ž˜์‹œ ์•ˆ ํ•˜๋‚˜?

์•ˆ ํ•ด๋„ ๋œ๋‹ค. A-Z a-z ๋“ฑ ํ•˜์ดํ”ˆ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ํ•œ ๋ญ‰์น˜๋กœ ์ธ์ง€ํ•˜๋Š”์ง€ ๋Œ€๊ด„ํ˜ธ ๋‚ด๋ถ€๋ผ๋ฉด -๋งŒ ์ ์–ด์ฃผ์–ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹จ, ๋Œ€๊ด„ํ˜ธ ๋ฐ–์ด๋ผ๋ฉด ์ด๋ฉ”์ผ ๋„๋ฉ”์ธ ์ฒ˜๋ฆฌํ•  ๋•Œ์ฒ˜๋Ÿผ (๋ฐฑ์Šฌ๋ž˜์‹œ) ํ•„์š”ํ•˜๋‹ค.

์ˆซ์ž๋Š” \d๋กœ๋„ ์“ธ ์ˆ˜ ์žˆ์ง€ ์•Š๋‚˜?

๋งž๋‹ค. ๊ทธ๋Ÿฐ๋ฐ \d๋Š” ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋ฉ”์ผ ์ฃผ์†Œ์—” ์ˆซ์ž๊ฐ€ ์—ฌ๋Ÿฟ ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ๋ฒ”์ฃผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค.

๐Ÿ’ก ์ •๊ทœ ํ‘œํ˜„์‹ - ๋น„๋ฐ€๋ฒˆํ˜ธ

๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์กฐ๊ธˆ ๋‚ด์šฉ์ด ๊ธธ์–ด์ง„๋‹ค. ์˜์–ด ์†Œ๋ฌธ์ž, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ตœ์†Œ 1๊ฐœ ํฌํ•จํ•˜์—ฌ 8์ž ์ด์ƒ 20์ž ์ดํ•˜๋กœ ์กฐ๊ฑด์„ ๊ฑธ์–ด๋ณด์ž.

const pwReg = 
/^(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*])[a-z\d!@#$%^&*]{8,20}$/

์›ฌ ์†Œ๊ด„ํ˜ธ์˜ ๋‚˜์—ด์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋˜‘๊ฐ™์€ ๋ชจ์–‘์ด ๋ฐ˜๋ณต ์ค‘์ด๋‹ค. ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ๋ฒ”์œ„๋งŒ ๋‹ค๋ฅผ ๋ฟ์ด๋‹ค.

(?=.*[๋ฒ”์œ„])

  • ?= : Positive Lookahead๋ผ๋Š” ๋ณ„์นญ์ด ์žˆ๋‹ค. ๊ณ ๋กœ ํ•˜๋‚˜์˜ ํŒจํ„ด์œผ๋กœ ์ž์ฃผ ์“ฐ์ธ๋‹ค๋Š” ์˜๋ฏธ์ผ ํ…Œ๋‹ค. ์˜์–ด์˜ ์ˆ™์–ด ๊ฐ™์€. ํŒจํ„ด1?=ํŒจํ„ด2๋ผ๋ฉด ํŒจํ„ด1์ด ํŒจํ„ด2์™€ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป.

  • .* : ์ž„์˜์˜ ๋ฌธ์ž 0๊ฐœ ์ด์ƒ => ์–ด๋–ค ๋ฌธ์ž์—ด์ด๋“  ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋‘˜์„ ํ•ฉ์ณ ๋งํ•˜๋ฉด '์•ž์œผ๋กœ ๋‚˜์˜ฌ ๋ฌธ์ž์—ด์€ ์ ์–ด๋„ ํ•˜๋‚˜์˜ [๋ฒ”์œ„]๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค'๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.

[a-z\d!@#$%^&*]
โญ๏ธ ๊ทธ๋ฆฌ๊ณ  ์ „์ฒด ๋ฒ”์œ„๋ฅผ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•œ๋‹ค.
์•ž์—๋Š” ๋‹ค ์กฐ๊ฑด๋“ค์ด๋ผ์„œ ์ด ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ๋ƒฅ ์กฐ๊ฑด๋งŒ ์žˆ๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š์€, ๊ทธ๋ž˜์„œ ์—๋Ÿฌ๋Š” ์—†์–ด๋„ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ๋œ๋‹ค.

์ฐธ๊ณ . ๊ณต๋ฐฑ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„๋ž˜

(?!.*\s) 
  • ?! : Negative Lookahead. ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์•„์•ผ ํ•  ๋•Œ ๊ฒ€์ƒ‰ํ•˜๋Š” ์กฐ๊ฑด์ด๋‹ค.
  • \s : ๊ณต๋ฐฑ

๊ณ ๋กœ ๋ฌธ์ž์—ด์— ๊ณต๋ฐฑ์ด ์—†์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๐Ÿ‘€ css ์ ์šฉ

์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ jsํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด Name.module.css๋กœ ํŒŒ์ผ ์ž‘์„ฑ ์‹œ ํŠน์ • ์ปดํฌ๋„ŒํŠธ์—๋งŒ css๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๊ฐ€๋ฉด์„œ ๋ถ„๋ฆฌํ•  ์ƒ๊ฐ์ด๋ผ ์šฐ์„  index.css์— ๋ชจ๋“  ๋‚ด์šฉ์„ ๋„ฃ์—ˆ๋‹ค. ํŒŒ์ผ์„ ๋”ฐ๋กœ ์ž‘์„ฑํ–ˆ์œผ๋‹ˆ ๋‹น์—ฐํžˆ ์ ์šฉ์„ ํ•ด์•ผ๊ฒ ๋‹ค.

import '../assets/index.css';

์ดˆ๊ฐ„๋‹จ.

๊ทผ๋ฐ ํŠน์ • ์ด๋ฆ„์œผ๋กœ ๋ฐ›๊ฒŒ ๋˜๋ฉด ํด๋ž˜์Šค/id ๋“ฑ ์ž‘์„ฑ๋œ ๋ถ€๋ถ„์„ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ ‘๊ทผํ•ด์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ์–‘์ด๋‹ค.

import styles from 'css ์ƒ๋Œ€์ฃผ์†Œ';

// ์ปดํฌ๋„ŒํŠธ์˜ return ์•ˆ
<button>
  {
   (true์ธ์ง€ ํ™•์ธ) ? <div className={styles.btn๋…ธ๋ž€์ƒ‰} : {styles.btn๊ฒ€์ •์ƒ‰}
  }
</button>

ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ๋‹ค๊ฐ€ ํ† ๊ธ€์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.


  • ์–ด๋–ป๊ฒŒ๋“  ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์„œ ๊ตฌํ˜„ํ•ด๋‚ธ ๊ฒŒ ์‹ ๊ธฐํ•˜๋‹ค. ๋‚ด ์ƒ๊ฐ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”๋ฐ ์–ด๋–ค ๋ฉด์—์„œ๋Š” ๋˜ ๋น ๋ฅด๊ณ ..

  • ํ•˜๋ฉด ํ• ์ˆ˜๋ก ์ˆ˜ํ•™ ๊ณต๋ถ€๋ž‘ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
    1) ๊ณต๋ถ€ํ•œ ์ง€ ๊ฑฐ์˜ 3๋‹ฌ ์ฐจ์ธ๋ฐ ๋งค์ผ ํ•ด๋„ ์•„๋ฌด ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค. ๋ฉฐ์น  ์ „๋ถ€ํ„ฐ ์Šฌ์Šฌ ์ฒซ ๊ฐ€๋‹ฅ์„ ์žก์€ ๊ฒƒ ๊ฐ™๋‹จ ๊ธฐ๋ถ„์ด๋‹ค.
    2) ๋‹ต์ง€ ๋ณด๊ณ  ๋ฒ ๋ผ๊ธฐ(์ฝ”๋“œ ๋ณต๋ถ™) ์•„๋ฌด ์˜๋ฏธ ์—†๋‹ค. ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฐ์› ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑด ์Šค์Šค๋กœ์—๊ฒŒ ํ˜น์€ ํƒ€์ธ์—๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋‚˜๋Š” ๋‚ด ๊ฒƒ๋งŒ์„ ๋‚ด ์–ธ์–ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์–ด์ฐŒ๋ณด๋ฉด ๊ณต๋ถ€๋Š” ์•„์ฃผ ์ •์งํ•˜๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ์€ ๋งํ•  ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋ฅด๋Š” ๊ฒƒ์€ ์•„๋Š” ์ฒ™ ํ•  ์ˆ˜ ์—†์œผ๋‹ˆ๊นŒ.

  • ์ซ„๋ ธ๋‹ค. 2์ฃผ๋กœ ๊ธฐํ•œ ์ •ํ•ด์„œ ๋š๋”ฑ ํ”„๋กœ์ ํŠธ ์™„์„ฑํ•˜๊ณ  ์ด๋Ÿฌ๋˜๋ฐ, ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„์ง€.. ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋‹ˆ๊นŒ. ๊ทธ๋Ÿฐ๋ฐ ๋ˆ„๊ฐ€ ์ด๋Ÿฐ ๋ง์„ ํ–ˆ๋‹ค์ง€. '๋”๋”˜ ๊ฒƒ์„ ์—ผ๋ ค์น˜ ๋ง๊ณ , ๋ฉˆ์ถœ ๊ฒƒ์„ ์—ผ๋ คํ•˜๋ผ.' ์ง„์ „์ด ์—†๋‹ค๋Š” ๋Š๋‚Œ์ด ๋“ค ๋–ˆ ์—ผ๋ คํ•  ๊ฒŒ ์—†๊ฒ ๋‹ค.

์ • ์ง„ ํ•˜ ์ž ๐Ÿข

profile
์ผ๋‹จ ํ•ด๋ณด๋Š” ํŽธ
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€