regular expression in iOS

前端 未结 4 1240
清酒与你
清酒与你 2020-12-06 05:44

I am looking for a regular expression to match the following -100..100:0.01. The meaning of this expression is that the value can increment by 0.01 and should b

相关标签:
4条回答
  • 2020-12-06 05:54
              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];       
            }
        }
    

    works fine.. Thnx for the efforts guys !

    0 讨论(0)
  • 2020-12-06 05:59

    Why do you want to use a regular expression? Why not just do something like (in pseudocode):

    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!
    
    0 讨论(0)
  • 2020-12-06 06:13

    You could use NSRegularExpression instead. It does support \b, btw, though you have to escape it in the string:

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

    Though, I think \\W would be a better idea, since \\b messes up detecting the negative sign on the number.

    A hopefully better example:

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

    I hope this helps. :)

    EDIT: fixed based on the below comment.

    0 讨论(0)
  • 2020-12-06 06:18
    (\b|-)(100(\.0+)?|[1-9]?[0-9](\.[0-9]{1,2})?\b
    

    Explanation:

    (\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 讨论(0)
提交回复
热议问题