0

在我的文本字段中,它应该允许正负十进制值。所以我使用了正则表达式

#define FLOAT_REGEX @"-[0-9]+(\.[0-9][0-9]?)?"

-(BOOL) checkForDecimalValue:(NSString *) string
{
NSPredicate *confidenceTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",FLOAT_REGEX]; 
return [confidenceTest evaluateWithObject:string]?YES:NO;
}

但如果我只输入没有任何小数点的正值(例如 100,200 等),则不接受。它也应该允许正值和整数。

4

2 回答 2

3

替换行使用以下内容:

#define FLOAT_REGEX @"^[-]?[0-9]*(.[0-9]*)?$"

希望这对您想要的有所帮助。从这里检查其有效性

于 2012-09-04T08:08:27.287 回答
0

1-9 范围内的数字后跟零个或多个其他数字:

^[1-9]\d*$

允许带有可选小数点的数字后跟数字。1-9 范围内的数字后跟零个或多个其他数字,然后可选地后跟一个小数点,后跟至少 1 个数字:

^[1-9]\d*(\.\d+)?$

笔记:

^开始和结束的$锚点基本上是说整个字符串必须与模式匹配

()?匹配括号之间的整个事物的 0 或 1

更新以处理逗号:

在正则表达式.中有一个特殊的含义——匹配任何单个字符。要从字面上匹配.字符串中的 a,您需要转义.using\.这是\.上面正则表达式中的含义。因此,如果您想使用逗号,则模式很简单:

^[1-9]\d*(,\d+)?$

进一步更新以处理逗号和句号

如果您想允许.数字组,之间的 a 以及积分和小数部分之间的 a ,请尝试:

^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$

即,这是 1-9 范围内的一个数字,后跟最多 2 个其他数字,然后是零个或多个句号组,后跟 3 个数字,然后像以前一样可以选择逗号和数字。

如果您想允许.数字之间的任何位置,请尝试:

^[1-9][\.\d]*(,\d+)?$

即数字 1-9 后跟零个或多个数字或句号可选地后跟逗号和一个或多个数字。

ref :正则表达式验证中的十进制或数值

希望它有所帮助,快乐编码:)

于 2012-09-04T07:50:34.270 回答