2016-07-04 3 views
0

전자 메일 주소에 대해이 정규식 (([A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6})을 가지고 있으며 문자열이 해당하는지 확인하기 위해 함수를 작성하려고합니다. 는 이미문자열이 정규식 패턴과 일치하는지 확인하십시오. Swift 2.2

func matches() -> Bool 
{ 
    let emailRegex : String = "([A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" 
    return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(self) //I use self because this is an extension of String 
} 

func matches() -> Bool 
{ 
    let emailRegex : String = "([A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" 
    return self.rangeOfStringrangeOfString(emailRegex, options: .RegularExpressionSearch) != nil 
} 

을 시도하지만 그들은 (자 NSPredicate와) 나에게 런타임 오류를 제공하거나 매일 이메일 adress은이

I (.rangeOfString와) 유효하지 말 중 하나 Swift 1.x로 작성된 this link에있는 Regex 클래스 선언도 발견되었지만 (이를 빌드하려면 Swift 2.x로 쉽게 변환 할 수 있음) 작동하지 않습니다.

작동 방식이나 이해할 수있는 방법을 찾지 않고 위젯을 검색해 보았습니다. (스위프트에 익숙하지 않습니다) 제 질문은 입니다. 문자열이 스위프트 2에서 정규식과 일치하는지 어떻게 확인합니까?

답변

0

정규 표현식의 시작 부분에 (다소 이상한) 여는 괄호가있는 것으로 보입니다. 그것을 제거하고 무슨 일이 일어나는가를보십시오 :

let emailRegex : String = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" 

나를 위해 일합니다.


NB : 정규식을 사용하여 전자 메일을 확인하는 것은 일반적으로 좋지 않습니다. 전자 메일을 보내고 오류를 확인하는 것이 좋습니다.
예를 들어, Wikipedia page on email addresses (예 : "[email protected]"@example.com과 같이 따옴표로 묶은 문자열)의 예제에서 정규식이 실패합니다.

+0

달콤한 예수님, ** 고맙습니다 **. Google에서 고생하고있는 내 모든 시간은 내 벙어리 덕분에 시간 낭비였습니다 – NOVA99

+0

두 가지 이유로 유효성 확인 이메일을 보낼 수 없습니다. 1) 주소록입니다. 2) 단지 명령 줄 도구입니다. – NOVA99

+0

@ NOVA99 커맨드 라인 툴은 전자 메일을 완벽하게 보낼 수 있습니다 (전형적인 예가'/ usr/bin/mail'). 그러나 주소록을 염두에두면 사용자에게 전자 메일의 정확성에 대한 책임을 맡길 수 있습니다. 예를 들어, 주소 (특히 국제 주소)의 유효성을 또한 확인하고 있습니까? – Evert

관련 문제