正则表达式验证十进制数

时间:2016-06-14 05:20:02

标签: ios regex

我需要验证十进制数,即整数部分最多可以有5个字符,分数值最多可以有2个字符。 (分数值是可选的)。我已经尝试了很多,我最终得到了以下表达。

"^([0-9]{0,5})((.|,)[0-9]{0,2})?$"

一切都很好,除了非十进制值(没有./,存在)。

即。表达式接受99999999

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

正则表达式的问题是点:没有正确的转义,点字符('。')接受除换行符之外的任何字符(请参阅此quick reference)。

为了表示一个文字点,你必须用反斜杠('\')来转义它,所以你的正则表达式看起来像这样:

{{1}}

答案 1 :(得分:0)

此表达式传递

"^([0-9]{0,5}+)?(\\.([0-9]{1,2})?)?$"

感谢所有尝试帮助我的人。

答案 2 :(得分:-1)

//试试这个

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

    if([string isEqualToString:@""]) {
            return YES;
        }
        if(string.length > 1 ) {
            return NO;
        }
        if ([textField.text rangeOfString:@"."].location != NSNotFound) {
            if([string rangeOfString:@"."].location != NSNotFound) {
                return NO;
            }
            NSString *strTemptext = [textField.text stringByReplacingOccurrencesOfString:@"." withString:@"$#"];
            NSArray *arrComponants = [strTemptext componentsSeparatedByString:@"$"];
            NSString *strText = @"";
            if (arrComponants.count > 0) {
                if([(NSString *)[arrComponants objectAtIndex:0] containsString:@"#"]) {
                    strText = [arrComponants objectAtIndex:0];
                } else {
                    strText = [arrComponants objectAtIndex:1];
                }
            } else {
                strText = [arrComponants objectAtIndex:0];
            }
            if([strText length] >= 3) {
                return NO;
            }

        }
        if(textField.text.length >= 5 && [textField.text rangeOfString:@"."].location == NSNotFound && [string rangeOfString:@"."].location == NSNotFound) {
            return NO;
        }
        if( [textField.text rangeOfString:@"."].location != NSNotFound && textField.text.length > 7) {
            return NO;
        }
        return YES;
    }
}