如何验证文本字段中只允许单个小数点的文本字段?

Gow*_*ham 3 iphone validation uitextfield ios

我需要限制用户只在小数点后输入两位数.我通过在textfield delegate shouldChangeCharactersInRange中执行以下代码来实现此目的.但它允许输入多个点.如何限制这个?提前致谢.

            NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
            NSArray *sep = [newString componentsSeparatedByString:@"."];
            if([sep count]>=2)
            {
                NSString *sepStr=[NSString stringWithFormat:@"%@",[sep objectAtIndex:1]];
                NSLog(@"sepStr:%@",sepStr);

                return !([sepStr length]>2);
            }
            return YES;
Run Code Online (Sandbox Code Playgroud)

Nil*_*Dev 12

最好的方法是Regular Expression在这样的shouldChangeCharactersInRange:委托方法中使用

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    NSString *newStr = [textField.text stringByReplacingCharactersInRange:range withString:string];

    NSString *expression = @"^([0-9]*)(\\.([0-9]+)?)?$";

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:nil];
    NSUInteger noOfMatches = [regex numberOfMatchesInString:newStr
                                                        options:0
                                                          range:NSMakeRange(0, [newStr length])];
    if (noOfMatches==0){
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

实现此有效字符串后:
12.004546
4546.5456465
.5464
0.454

等......

您也可以使用此限制小数点后的整数 Regular Expression

@"^([0-9]*)(\\.([0-9]{0,2})?)?$"

实现此有效字符串后:
12.00
4546.54
.54
0.45