지금 개발하고 있는 앱에서, String 배열이 무작위로 쭉 있을 때, 전화번호 형식이 있다면 리턴해주는 함수가 필요했다. 코시국 안심콜 전화를 위해서.
["0101", "훼이크", "080", "응 아니야", "080", "-12", "3", "-", "4567"] 라는 String 배열이 있다면 0801234567 만 정확히 뽑아줘야 한다.
일단은 파이썬이 더 편하기 때문에.. 파이썬으로 먼저 짜보고 Swift 로 옮겼다.
# AI 문자인식 결과 elements resultElements = [["ksw", "-", "+++", "O80", "-", "1234-5", "678"], ["bsj", "ㅇ8O-1234", "5678"], ["080", "-", "1111", "-", "2222", "ksw", "12345678"], ["0101", "훼이크", "080", "응 아니야", "080", "-", "123", "-", "4567"]] # AI 가 0, ㅇ, O, o 를 헷갈려하고 있다. confusingWithZero = ['o', 'O', 'ㅇ'] def isConsideredAsNumber(x): if (x in ['o', 'O', 'ㅇ', '-', '.']) or x.isdigit(): return True else: return False def elemIsNumber(elem): result = True for x in elem: if not isConsideredAsNumber(x): result = False break return result def refineElemNumber(number): result = "" for x in number: if x.isdigit(): result += x elif x in ['o', 'O', 'ㅇ']: result += "0" return result def getTELNumber(elements): for element in elements: answer = "" for elem in element: if elemIsNumber(elem): answer += refineElemNumber(elem) else: answer = "" if 10 <= len(answer) <= 11: break print(answer) getTELNumber(resultElements)
import Foundation var recognizeResultElements: Array<String> = Array<String>(["0101", "훼이크", "080", "응 아니야", "080", "-12", "3", "-", "4567"]) let consideredAsNumber: Array<Character> = Array<Character>(["o", "O", "ㅇ", "-", "."]) let confusingWithZero: Array<Character> = Array<Character>(["o", "O", "ㅇ"]) func isConsideredAsNumber(_ x: Character) -> Bool { if consideredAsNumber.contains(x) || x.isNumber { return true } else { return false } } func elemIsNumber(_ elem: String) -> Bool { var result: Bool = true for x in elem { if !isConsideredAsNumber(x) { result = false break } } return result } func refineElemNumber(_ number: String) -> String { var result: String = "" for x in number { if x.isNumber { result += String(x) } else if confusingWithZero.contains(x) { result += "0" } } return result } func getTELNumber(_ elements: Array<String>?) -> String? { guard let elements = elements else { return nil } var answer = "" for elem in elements { if elemIsNumber(elem) { answer += refineElemNumber(elem) } else { answer = "" } if 10 <= answer.count && answer.count <= 11 { break } } return answer } getTELNumber(recognizeResultElements)