2012-02-13 8 views

Respuesta

19

Supongo que por URL, se refiere a una cadena que identifica una ubicación de recursos de Internet.

Si tiene una idea sobre el formato de la cadena de entrada, entonces ¿por qué no verificar manualmente si la cadena comienza con http://, https:// o cualquier otro esquema que necesite? Si espera que otros protocolos, también se puede añadir a la lista de verificación (por ejemplo ftp://, mailto://, etc)



if ([myString hasPrefix:@"http://"] || [myString hasPrefix:@"https://"]) 
{ 
    // do something 
} 

Si usted está buscando una solución más sólida y detectar cualquier tipo de esquema de URL, entonces debería usa una expresión regular

Como nota al margen, la clase NSURL está diseñada para expresar cualquier tipo de ubicación de recursos (no solo recursos de Internet). Es por eso que cadenas como img/demo.jpg o file://bla/bla/bla/demo.jpg se pueden transformar en objetos NSURL.

Sin embargo, de acuerdo con la documentación, [NSURL URLWithString] debe devolver nil si la cadena de entrada no es una cadena válida de recursos de Internet. En la práctica, no.

+0

¡Gran respuesta! Gracias. Y lo más importante es que funciona bien para mí. – Stas

1

Intente crear NSUrl con él, y vea si devuelve un resultado no nulo.

+0

He intentado ya que: si ([NSURL urlWithString: urlString]! = Nil) {} pero por alguna razón que sólo me devuelve mi cadena !! (Aunque la descripción del método dice que debe devolver nil si la cadena no es una URL válida ... realmente no sé por qué) – Stas

0
if ([NSURL URLWithString:text]) { 
    // valid URL 
} 
else { 
    // invalid URL 
} 
+0

ese es el punto en que no funciona ... ¿he encontrado un error extraño o qué? ? Tengo un inicio de sesión en el si NSLog (@ "url no válido:% @", [NSURL URLWithString: urlString]); Y me muestra: url no válido: img/playgrounds.png – Stas

+3

Es por eso que deberías decir lo que ya has intentado en tu pregunta. Si su cadena es literalmente "img/playgrounds.png", entonces es correcta; esa no es una URL válida. Si lo intenta con, digamos, 'http: // img.ly/playground.png', entonces funcionará. –

6
+ (BOOL)validateUrlString:(NSString*)urlString 
{ 
    if (!urlString) 
    { 
     return NO; 
    } 

    NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; 

    NSRange urlStringRange = NSMakeRange(0, [urlString length]); 
    NSMatchingOptions matchingOptions = 0; 

    if (1 != [linkDetector numberOfMatchesInString:urlString options:matchingOptions range:urlStringRange]) 
    { 
     return NO; 
    } 

    NSTextCheckingResult *checkingResult = [linkDetector firstMatchInString:urlString options:matchingOptions range:urlStringRange]; 

    return checkingResult.resultType == NSTextCheckingTypeLink 
     && NSEqualRanges(checkingResult.range, urlStringRange); 
} 
+0

esto funciona. Gracias – kevinl

7

que utilizan esta solución, que es al parecer una chequeo y menos complejo que un cheque Regex -

- (BOOL)isURL:(NSString *)inputString 
{ 
    NSURL *candidateURL = [NSURL URLWithString:inputString]; 
    return candidateURL && candidateURL.scheme && candidateURL.host; 
} 
Cuestiones relacionadas