2011-03-29 26 views
14

Aşağıdaki -100..100:0.01 ile eşleşen normal bir ifade arıyorum. Bu ifadenin anlamı, değerin 0,01 artması ve -100 ile 100 aralığında olması olabilir.iOS'ta normal ifade

Herhangi bir yardım?

+1

'Bu olayı normal ifadede çalışmak istiyor' demek? –

+0

, iOS uygulamamda değerlendirebileceğim normal bir ifade almak istiyor. – Cannon

+0

'-100..100: 0.01' bir literal temsili mi, yoksa bazı örnekler verebilir misiniz? Aksi halde, zaman kaybıdır. – sln

cevap

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

Açıklama:

(\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 düzenli ifade değerlendiricisi NSPredicate,/b ve dizilerden kaçmayı anlamıyor :( – Cannon

+0

[0-9] {3}. [0-9] {2} 'yi denedim, ancak sorunumu çözemedim – Cannon

+0

+1 –

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

çabaları çocuklar için gayet .. Thnx çalışıyor!

2

Neden düzenli bir ifade kullanmak istiyorsunuz? Neden sadece (pseudocode) gibi bir şey yapamaz:

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

yerine NSRegularExpression kullanabilirsiniz.

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

rağmen, ben \\W daha iyi bir fikir olacağını düşünüyorum, \\b messes kadar numarasına eksi işareti tespit başlangıcı: Eğer dizede ondan kaçmak zorunda olsa o, btw \b desteklemez.

bir umutla daha iyi örnek:

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

umarım bu yardımcı olur.

DÜZENLEME: aşağıdaki yoruma göre sabitlenmiştir.

+2

"NSRange * aralığı" güzel düzenlemesi "NSRange aralığı" olmalıdır – Arnaud