2011-03-29 24 views
14

Estoy buscando una expresión regular para que coincida con el siguiente -100..100:0.01. El significado de esta expresión es que el valor puede incrementarse en 0.01 y debe estar en el rango -100 a 100.expresión regular en iOS

¿Alguna ayuda?

+1

¿Qué significa "querer resolver esto en expresiones regulares"? –

+0

quiero obtener una expresión regular, que puedo evaluar en mi aplicación de iOS. – Cannon

+0

Es '-100..100: 0.01' una representación literal, o puede dar algunos ejemplos. De lo contrario, es una pérdida de tiempo. – sln

Respuesta

10
(\b|-)(100(\.0+)?|[1-9]?[0-9](\.[0-9]{1,2})?\b 

Explicación:

(\b|-)  # word boundary or - 
(   # Either match 
100  # 100 
(\.0+)? # optionally followed by .00.... 
|   # or match 
[1-9]?  # optional "tens" digit 
[0-9]  # required "ones" digit 
(   # Try to match 
    \.  # a dot 
    [0-9]{1,2}# followed by one or two digits 
)?   # all of this optionally 
)   # End of alternation 
\b   # Match a word boundary (make sure the number stops here). 
+0

iOS evaluador de expresiones regulares NSPredicate no comprende/b y secuencias de escape :( – Cannon

+0

Intenté [0-9] {3}. [0-9] {2}, pero no resuelve mi problema. – Cannon

+0

+1 para el arreglo agradable –

1
  if(val>= -100 && val <= 100) 
    { 
     NSString* valregex = @"^[+|-]*[0-9]*.[0-9]{1,2}"; 
     NSPredicate* valtest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", valregex]; 
     ret = [valtest evaluateWithObject:txtLastname.text]; 
     if (!ret) 
     { 
      [alert setMessage:NSLocalizedString(@"More than 2 decimals", @"")]; 
      [alert show];  
     } 
    } 

funciona bien .. Thnx para los chicos esfuerzos!

2

¿Por qué quieres usar una expresión regular? ¿Por qué no acaba de hacer algo así (en pseudocódigo):

is number between -100 and 100? 
    yes: 
    multiply number by 100 
    is number an integer? 
     yes: you win! 
     no: you don't win! 
    no: 
    you don't win! 
30

Usted podría utilizar NSRegularExpression lugar. No apoyar \b, por cierto, si usted tiene que escapar de ella en la cadena:

NSString *regex = @"\\b-?1?[0-9]{2}(\\.[0-9]{1,2})?\\b"; 

embargo, creo que \\W sería una mejor idea, ya \\b mete hasta detectar el signo negativo en el número.

Una de esperar un mejor ejemplo:

NSString *string = <...your source string...>; 
NSError *error = NULL; 

NSRegularExpression *regex = [NSRegularExpression 
    regularExpressionWithPattern:@"\\W-?1?[0-9]{2}(\\.[0-9]{1,2})?\\W" 
         options:0 
         error:&error]; 

NSRange range = [regex rangeOfFirstMatchInString:string 
           options:0 
           range:NSMakeRange(0, [string length])]; 
NSString *result = [string substringWithRange:range]; 

espero que esto ayude. :)

EDITAR: se ha corregido según el siguiente comentario.

+2

'Rango NSRange * debe ser' Rango NSRange' – Arnaud