2013-02-26 2 views
2

ipv4 주소의 유효성을 검사하기 위해 정규 표현식을 사용해야하는 iOS 프로젝트에서 작업 중입니다. 내가 코드를정규 표현식으로 IP 주소 유효성 검사 - 알 수없는 이스케이프 시퀀스

// only support ip4 currently 
NSRegularExpression *regex = [NSRegularExpression 
           regularExpressionWithPattern:@"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" 
           options:0 
           error:nil]; 

NSUInteger numberOfMatches = [regex numberOfMatchesInString:IpString options:0 range:NSMakeRange(0, [IpString length])]; 
return (numberOfMatches==1?TRUE:FALSE); 

엑스 코드를 다음을 사용

나 경고 유지 "알 수없는 이스케이프 시퀀스를.". "1.3.6.-6"또는 "2.3.33"을 입력하면 true를 반환합니다.

어떻게 정규식에서 도트 (.)를 사용할 수 있습니까? 감사합니다

답변

4

.을 백 슬래시로 두 번 사용해야합니다. NSString이 첫 번째 백 슬래시를 해석 중이며 . (존재하지 않음)의 이스케이프 문자를 찾고 있습니다. 이중 백 슬래쉬 (\\.)는 첫 번째 백 슬래시가 두 번째 백 슬래시 (실제로 존재 함)를 벗어나게하므로 \을 정상적으로 사용할 수 있습니다.

그래서 예를 들어, 정규식은 다음과 같습니다

@"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" 
관련 문제