2011-11-22 12 views
6

Sto cercando di convalidare un URL con questo metodo:URL Validation (Objective-C)

Codice:

- (BOOL) validateUrl: (NSString *) candidate { 

    NSString *urlRegEx= 
    @"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)"; 

    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
    return [urlTest evaluateWithObject:candidate]; 

} 

Non funziona. Penso che il problema sia con l'espressione regolare.

risposta

13

È possibile utilizzare il metodo + (id)URLWithString:(NSString *)URLString di NSURL, che restituisce nil se la stringa non è corretta.

Utilizzare if (URL && URL.scheme && URL.host) per controllare l'URL.

+1

ho provato! ma ancora non funziona! per esempio "ht: //www.yahoo." questo funziona bene! e non restituisce nill !!! –

+2

Questo è URl valido secondo RFC 2396. Dalla documentazione di apple La stringa con cui inizializzare l'oggetto NSURL. Deve essere un URL conforme a RFC 2396. Questo metodo analizza URLString in base alle RFC 1738 e 1808. utilizza "if (URL && URL.scheme && URL.host)" per controllare l'URL. –

+3

RFC 2396 utilizza questo^(([^: /? #] +):)? (// ([^ /? #] *))? ([^? #] *) (\? ([^ #] *))? (# (. *))? espressione regolare. Per ulteriori informazioni, consultare http://www.ietf.org/rfc/rfc2396.txt –

7

prova con questo ..

- (BOOL) validateUrl: (NSString *) candidate { 
    NSString *urlRegEx = 
    @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"; 
    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
    return [urlTest evaluateWithObject:candidate]; 
} 

Può aiutare u fuori.

+0

non funziona per gli URL con '/' alla fine ...: - / –

1
NSString *urlRegEx = @"http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";