๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming ๊ฐœ๋ฐœ/๐ŸŽ iOS ๊ฐœ๋ฐœ, Swift

[Swift] ๊ฐ„ํŽธํ•˜๊ฒŒ ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์นญํ•˜๋Š” ๋ฐฉ๋ฒ• (NSRegularExpression ์‚ฌ์šฉX)

by kimdee 2022. 1. 13.
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ์ด ํฌ์ŠคํŒ…์€ NSRegularExpression ์—†์ด ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. NSRegularExpression์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ๋“ค์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”. 

 

- NSRegularExpression ๊ณต์‹๋ฌธ์„œ 

https://developer.apple.com/documentation/foundation/nsregularexpression

 

 

Apple Developer Documentation

 

developer.apple.com

 

- ์Šค์œ„ํ”„ํŠธ์—์„œ ์ •๊ทœ์‹ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•( NSRegularExpression์„ ์‚ฌ์šฉํ•œ ์˜ˆ) 

https://www.hackingwithswift.com/articles/108/how-to-use-regular-expressions-in-swift

 

How to use regular expressions in Swift

Match a variety of text using NSRegularExpression.

www.hackingwithswift.com


๊ณ„์ ˆํ•™๊ธฐ๋กœ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆ˜์—…์ด ๋๋‚˜๊ณ  ๋‚˜๋‹ˆ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์„ ์“ธ ์งฌ์ด ๋“œ๋””์–ด ๋‚˜๋„ค์š”. 21๋…„๋„ ํšŒ๊ณ ์™€, ์ž๊ฒฉ์ฆ ํ›„๊ธฐ๊ธ€, ์Šค์œ„ํ”„ํŠธ ๊ณต๋ถ€๊ธ€ ๋“ฑ ๋ฐ€๋ฆฐ ๊ธ€์€ ๋งŽ์ง€๋งŒ, ์ •๊ทœ์‹์€ NSRegularExpression ๊ด€๋ จ๊ธ€์ด ๋˜๊ฒŒ ๋งŽ๋”๋ผ๊ตฌ์š”. ๊ฐ„๋‹จํ•˜๊ฒŒ String ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๊ทœํ‘œํ˜„์‹์˜ ํŒจํ„ด๊ณผ ๋ฌธ์ž์—ด์„ ๋งค์นญํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํฌ์ŠคํŒ…ํ•ด๋ด…๋‹ˆ๋‹ค. 

 

 

1. ์ •๊ทœํ‘œํ˜„์‹ ํŒจํ„ด ์ฒดํ—˜ํ•ด๋ณด๊ธฐ

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

์œ„ ์‚ฌ์ดํŠธ์—์„œ ์ •๊ทœ์‹ ํŒจํ„ด์„ ์ฒดํฌํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ œ๊ฐ€ ์Šฌ๋ž˜์‹œ๋กœ ๊ฐ์‹ธ์ ธ์žˆ๋Š” /ํ•œ๊ธ€/๋กœ๋งŒ ๋œ ๋‘๊ธ€์ž์˜ ๋‹จ์–ด๋ฅผ ์ฐพ๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ํ•ด๋ณผ ์ˆ˜ ์žˆ์„๊ฑฐ์—์š”. 

 

์ •๊ทœ์‹์— ๋งž๋Š” ํ…์ŠคํŠธ๋งŒ ํ•˜๋Š˜์ƒ‰์œผ๋กœ ํ•˜์ด๋ผ์ดํŠธ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”. 

 

์‚ฌ์ดํŠธ๋‚ด์—์„œ ์น˜ํŠธ์‹œํŠธ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋”ฐ๋กœ ์ •๊ทœ์‹์„ ๊ณต๋ถ€ํ•˜์ง€ ์•Š์•„๋„ ๋ฐ”๋กœ ์ฐธ๊ณ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ œ๋“ค์ด ์žˆ๊ณ ์š”. 

์ปค๋ฎค๋‹ˆํ‹ฐ ํŒจํ„ด์„ ํด๋ฆญํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฏธ ๋งŒ๋“ค์–ด๋‘” ์ •๊ทœ์‹ ํŒจํ„ด์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์–ด์š”. 

์ €๋Š” 16์ง„์ˆ˜ ๊ด€๋ จํ•œ ์ •๊ทœ์‹์„ ์ฐพ๊ธฐ ์œ„ํ•ด hex ๋ผ๋Š” ๊ฒ€์ƒ‰์–ด๋กœ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

 

 


2. SWIFT์—์„œ ์ •๊ทœํ‘œํ˜„์‹์„  ๋‹จ ํ•œ์ค„๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• 

 

// ๊ผญ import ํ•ด์ฃผ์–ด์•ผ ๊ฐ€๋Šฅ 
import Foundation

( ๊ฒ€์‚ฌํ• ๋ฌธ์ž์—ด_๋˜๋Š”_๋ฌธ์ž์—ด๋ณ€์ˆ˜).range(
	of:  ์ •๊ทœ์‹ํŒจํ„ด_๋˜๋Š”_๋ณ€์ˆ˜, options: .regularExpression) != nil ))

 

Foundation์„ importํ•œ ํ›„, ์œ„์™€ ๊ฐ™์ด String์˜ .range ๋ฉ”์„œ๋“œ๋ฅผ  ์ด์šฉํ•˜์—ฌ ์ •๊ทœํ‘œํ˜„์‹ ๋งค์นญ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ๋“ฑ nil๊ฐ’์ด ๋ฐ˜ํ™˜๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น๊ฐ’์ด nil ์ธ์ง€ ๋จผ์ € ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๋ฆฌํ„ด๊ฐ’์€ boolean ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น๋ฉ”์„œ๋“œ๋ฅผ ์กฐ๊ฑด๋ฌธ์˜ ์กฐ๊ฑด์œผ๋กœ ๋„ฃ๊ฑฐ๋‚˜, ํ˜น์€ ํ•„์š”์— ๋”ฐ๋ผ ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ํ•ด๋‹น ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ํœด๋Œ€ํฐ ๋ฒˆํ˜ธ๋ฅผ ์ฒดํฌํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

cellPhonne ๋ณ€์ˆ˜์— ๊ฒ€์‚ฌํ•  ๋ฌธ์ž์—ด์„, patternCellPhone์—๋Š” ์ •๊ทœ์‹ ํŒจํ„ด์„ ์ž…๋ ฅํ•˜๊ณ  ํ•ด๋‹น ์ŠคํŠธ๋ง์— .range(of:  ์ •๊ทœ์‹ํŒจํ„ด(๋˜๋Š” ํŒจํ„ด์ด ์ €์žฅ๋œ ๋ฌธ์ž์—ด๋ณ€์ˆ˜), options: .regularExpression) ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ isValidCellPhone ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

String cellPhone = "010-123-1234"
String patternCellPhone = #"^\(?\d{3}\)?[ -]?\d{3,4}[ -]?\d{4}$"#

var isValidCellPhone =  
	cellPhone.range(of: patternCellPhone, options: .regularExpression ) != nil)

// ์ •๊ทœ์‹ ํŒจํ„ด์— ๋งค์นญ๋  ๊ฒฝ์šฐ true, ์•„๋‹ ๊ฒฝ์šฐ false๋ฅผ ๋ณ€์ˆ˜ IsValidCellPhone ์— ์ €์žฅํ•œ๋‹ค.

 

 

๋˜๋Š” ๋‹จ์ˆœํžˆ ์•„๋ž˜์ฒ˜๋Ÿผ ๊ฒ€์‚ฌํ•  ๋ฌธ์ž์—ด๊ณผ ์ •๊ทœํ‘œํ˜„์‹์„ ๋ฐ”๋กœ ๋„ฃ์–ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

print(("010-123-1234".range(of: #"^\(?\d{3,4}\)?[ -]?\d{3,4}[ -]?\d{4}$"# ,
                            options: .regularExpression)) != nil)

 

 

true ๊ฐ’์ด ๋‚˜์˜จ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Foundation์„  ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด, String์˜ range ๋ฉค๋ฒ„๊ฐ€ ์—†๊ณ , regularExpression ๋ฉค๋ฒ„๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

 

 

3. ์ฐธ๊ณ ํ•œ/ํ•  ๋งŒํ•œ ๋งํฌ

- ๋ฌธ์ž ๋ฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ฐพ๊ธฐ 

: ํŠน์ • ๋ฌธ์ž, ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌธ์„œ ์•„๋žซ์ชฝ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://developer.apple.com/documentation/foundation/nsstring/1416849-range

 

Apple Developer Documentation

 

developer.apple.com

 

- ์Šค์œ„ํ”„ํŠธ ๋ ˆํผ๋Ÿฐ์Šค ๋งค๋‰ด์–ผ์˜ ํŒจํ„ด์˜ ํ‘œํ˜„์‹ ํŒจํ„ด ์„น์…˜ (Expression Pattern) 

https://docs.swift.org/swift-book/ReferenceManual/Patterns.html#ID426

 

Patterns — The Swift Programming Language (Swift 5.5)

Patterns A pattern represents the structure of a single value or a composite value. For example, the structure of a tuple (1, 2) is a comma-separated list of two elements. Because patterns represent the structure of a value rather than any one particular v

docs.swift.org

- ์Šค์œ„ํ”„ํŠธ ๋žญ๊ท€์ง€ ๊ฐ€์ด๋“œ : ๋ฌธ์ž์—ด๊ณผ ์บ๋ฆญํ„ฐ 

https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html

 

Strings and Characters — The Swift Programming Language (Swift 5.5)

Strings and Characters A string is a series of characters, such as "hello, world" or "albatross". Swift strings are represented by the String type. The contents of a String can be accessed in various ways, including as a collection of Character values. Swi

docs.swift.org

- ์• ํ”Œ๊ฐœ๋ฐœ์ž ์‚ฌ์ดํŠธ 

https://developer.apple.com/documentation/foundation/nsstring/1416849-range

 

Apple Developer Documentation

 

developer.apple.com

 

- ์Šค์œ„ํ”„ํŠธ์—์„œ ์ •๊ทœ์‹ ํ‘œํ˜„ ์‚ฌ์šฉํ•˜๊ธฐ (advanced swift) 

https://www.advancedswift.com/regular-expressions/#phone-number-regular-expression

 

Regular Expressions in Swift

Learn how to create and use regular expressions in Swift to validate emails, phone numbers, usernames, passwords, and dates.

www.advancedswift.com

- ์Šค์œ„ํ”„ํŠธ์—์„œ ์ •๊ทœ์‹ ํ‘œํ˜„ ์‚ฌ์šฉํ•˜๊ธฐ (ํ‹ฐ์Šคํ† ๋ฆฌ) 

https://tngusmiso.tistory.com/62

 

[Swift] ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ณด๋‹ค๊ฐ€ ์—ด ๋ฐ›์•„์„œ ์ •๋ฆฌํ•˜๋Š” Swift ์ •๊ทœ์‹ - NSRegularExpression (Regex)

๋ฌธ์ž์—ด ๋ฌธ์ œ ์ง„์งœ ์–ด๋ ต๋‹ค!!!!!!!!! ๋งค๋ฒˆ ๊ตฌ๊ธ€๋ง ํ•˜์ง€ ๋ง๊ณ  ์ •๋ฆฌํ•ด ๋‘ฌ์•ผ ๊ฒ ๋‹ค๋Š” ํ•„์š”์„ฑ์„ ๋Š๊ผˆ๋‹ค... Swift ์ฃผ์˜์‚ฌํ•ญ ๋ฌธ์ž์—ด์—์„œ ์—ญ์Šฌ๋ž˜์‰ฌ( \ )๋Š” ์—ฐ์‚ฐ์ž ์—ญํ• ์„ ํ•˜๋ฏ€๋กœ, \ ๋ฅผ ๋ฌธ์ž ์ž์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€

tngusmiso.tistory.com

 

 


 

๋งˆ์น˜๋ฉฐ

 

 

์˜ค๋Š˜๋„ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. 

 

๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ, ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํ˜น์‹œ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ”ผ๋“œ๋ฐฑํ•˜์‹ค  ๋‚ด์šฉ ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“  ๋Œ“๊ธ€๋กœ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€