2011-04-25 12 views
23

ya que las extenciones regulares no son compatibles con Cocoa Me parece RegexKitLite muy útil. Pero todos los ejemplos extraen cadenas coincidentes.¿Cómo comprobar si la cadena coincide con una expresión regular en Object-C?

sólo quiero probar si una cadena coincide con una expresión regular y obtener un Sí o No.

¿Cómo puedo hacer eso?

+2

Expresiones regulares 'no admitidas en Cocoa'? 'NSRegularExpression' ha sido parte del framework desde el lanzamiento de iOS 4.0, casi un año antes de que se hiciera esta pregunta, y aparentemente ha habido métodos que hacían uso de expresiones regulares desde antes de que se introdujera' NSRegularExpression', como se menciona en, para ejemplo, la respuesta de Vaz. –

Respuesta

51

He usado NSPredicate para tal fin:

NSString *someRegexp = ...; 
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", someRegexp]; 

if ([myTest evaluateWithObject: testString]){ 
//Matches 
} 
+0

gracias, ¿puedo usar la sintaxis de expresión regular predeterminada para algunosRegexp? –

+2

Creo que sí, p. Lo usé para la validación simple de correo electrónico: NSString * emailRegex = @ "[A-Z0-9a-z ._% + -] + @ [A-Za-z0-9 .-] + \\. [A-Za- z] {2,4} "; – Vladimir

+3

@Vladimir que la expresión regular del correo electrónico es inadecuada. Las direcciones de correo electrónico pueden contener unicode y los dominios de nivel superior no tienen entre 2 y 4 caracteres. – Winny

5

Utilice el método -isMatchedByRegex:.

if([someString isMatchedByRegex:@"^[0-9a-fA-F]+:"] == YES) { NSLog(@"Matched!\n"); } 
+5

Nota que no es parte del cacao. respuesta muy simple aquí ... http://stackoverflow.com/questions/4353834/search-through-nsstring-using-regular-expression – Fattie

+0

Bueno, la respuesta de @Vladimir me parece más simple. –

+1

¿Por qué usar '== SÍ'? –

16

Otra manera de hacer esto, que es un poco más simple que el uso de NSPredicate, es una opción casi indocumentado a -rangeOfString:options: de NSString:

NSRange range = [string rangeOfString:@"^\\w+$" options:NSRegularExpressionSearch]; 
BOOL matches = range.location != NSNotFound; 

digo "casi indocumentado", debido a que el método en sí doesn Incluya la opción como disponible, pero si se encuentra con la documentación de los operadores de Búsqueda y comparación y encuentra NSRegularExpressionSearch, verá que es una opción válida para los métodos -rangeOfString... desde OS X 10.7 e iOS 3.2.

Cuestiones relacionadas