2011-03-29 20 views
14

Sto cercando un'espressione regolare che corrisponda al seguente -100..100:0.01. Il significato di questa espressione è che il valore può aumentare di 0.01 e dovrebbe essere compreso nell'intervallo tra -100 e 100.espressione regolare in iOS

Qualsiasi aiuto?

+1

Che cosa significa "voglio risolvere questa cosa nell'espressione regolare"? –

+0

desidera ottenere un'espressione regolare, che posso valutare nella mia app iOS. – Cannon

+0

È '-100..100: 0.01' una rappresentazione letterale, o puoi dare qualche esempio. Altrimenti è una perdita di tempo. – sln

risposta

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

Spiegazione:

(\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

Il valutatore di espressioni regolari per iOS NSPredicate non capisce le sequenze/b e le sequenze di escape :( – Cannon

+0

Ho provato [0-9] {3}. [0-9] {2}, ma non risolve il problema – Cannon

+0

+1 per la bella disposizione –

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];  
     } 
    } 

funziona bene .. Thnx per gli sforzi ragazzi!

2

Perché si desidera utilizzare un'espressione regolare? Perché non fare qualcosa di simile (in pseudocodice):

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

Si potrebbe utilizzare NSRegularExpression invece. Esso supporta \b, btw, anche se bisogna sfuggire nella stringa:

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

però, credo che \\W sarebbe un'idea migliore, dal momento che \\b scombina rilevare il segno negativo sul numero.

Un esempio si spera migliore:

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]; 

Spero che questo aiuta. :)

MODIFICA: riparato in base al commento di seguito.

+2

'Intervallo NSRange * dovrebbe essere' Intervallo NSRange' – Arnaud