2014-01-26 2 views
0

이 질문은 많은 복제본을 보았지만 결국에는 적합하지 않습니다. iOS의 Safari 앱 (예 : 7)에서와 같이 내 앱에서 내 URL의 유효성을 검사해야합니다.특정 URL 유효성 확인

예 : 해당 문자열이 으로 지정되어야합니다. : http://apple.com; http://www.apple.com 이들 중 은 유효하지 않음 : http://apple.apple; http://apple;

#define stringRegex @"^(http://|https://|http://www.|https://www.)[a-z0-9-.]+(aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mn|mn|mo|mp|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|nom|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ra|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw|arpa)([/?].*)?$" 

... 

     NSString *stringToCheck = searchBar.text; 
     if ([stringToCheck rangeOfString:@"https://"].location != NSNotFound) { 
       stringToCheck = [stringToCheck stringByReplacingOccurrencesOfString:@"https://" 
                       withString:@"http://"]; 
     } 
     if ([stringToCheck rangeOfString:@"http://"].location == NSNotFound) { 
       stringToCheck = [NSString stringWithFormat:@"http://%@",stringToCheck]; 
     } 

     NSString * urlAddress = stringToCheck; 
     NSError *error = NULL; 
     NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:stringRegex options:NSRegularExpressionCaseInsensitive error:&error]; 
     NSTextCheckingResult *match = [regex firstMatchInString:urlAddress 
                   options:0 range:NSMakeRange(0, [urlAddress length])]; 
     if (match) { 
         NSLog(@"Url is valid"); 
     } 
       else { 
         NSLog(@"Url isn't valid"); 
} 

마지막으로이 케이스의 99 %에서 일하고있어,하지만 때로는 잘못된 문자열을 확인합니다 : http://www.........something

나는 이런 식으로 할 노력하고있어. 나는 이유를 모른다. 예 :

http://test - 유효합니다. http://thkl - 올바르지 않습니다.

그래서 제가 풀려고하는 문제입니다.

답변

1

정규식 패턴은 마침표가 마침표 (마침표)로 마지막 일치가 만들어 지도록 보장하지 않습니다.

  1. http://
  2. te
  3. st

을 그리고 당신은 올바른 위치에 점이 있다는 것을 확인하기 위해 패턴을 업데이트해야합니다 : 그래서 http://test이 일치한다. 와일드 카드가 아니라 도트에서 탈출하는 것을 잊지 마십시오.

+0

감사합니다. 그래서 나는'(\\.] {1}'의 앞 (''com | ru ...) '을 추가했습니다. 맞아? @Wain –

+0

그래, 있어야한다. (나는 당신이 괄호가 필요하다고 생각하지 않지만). 나는 당신이'www.'에서 점을 벗어날 필요가 있다고 생각합니다. – Wain

+0

감사합니다! 한가지 더 질문 해주세요. 이런 종류의 regexp와 함께'http : //developer.apple.com'과 같은 2 단계 도메인을 구현할 방법이 있습니까? 이제는 잘못된 URL로 표시됩니다. @Wain –