I have this regular expression
`NSString *expression = @"^([0-9]+)?(\\.?\\,?([0-9]{1,2})?)?$";`
but i need a limit to 6 number before the dot or the comma and permit always two decimals.
每个字符都用正则表达式检查是否有效我可以写。
问题是我可以用这个表达式写 XXXXXXXX(8 个数字)但不能写六个数字或 (XXXXXX.XX)(8 个数字和 2 个小数)
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == _priceTf)
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSString *expression = @"^([0-9]{1,6})?(\\.?\\,?([0-9]{1,2})?)?$";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
options:NSRegularExpressionCaseInsensitive
error:nil];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
options:0
range:NSMakeRange(0, [newString length])];
if (numberOfMatches == 0)
return NO;
}
return YES;
}
编辑: 但是如果你想验证例如“666.66”。首先验证“6”,然后验证“66”,然后验证“666”,然后验证“666”。并且始终相同,并且所有这些都可以在正则表达式中有效。这是因为我有“?”在所有正则表达式中
但是我也有允许写 .666 的例子
最佳答案
编辑 2:对于文本输入的增量有效性检查,这应该足够了:
NSString *expression = @"^[0-9]{0,6}([.,][0-9]{0,2})?$";
它匹配所有字符串,例如:
- 字符串以零到六位数字开头。
- 字符串可以有一个可选的小数部分。
- 小数部分以分隔符开头(
.
或,
)。 - 小数部分最多为两位数。
- 处理字符串的整个长度,并且不存在先前规则之外的其他字符。
编辑:听着,我只是不明白你的问题。我将这个答案留在这里,因为它可能会帮助您到达您想去的地方,即使我不知道那在哪里。
听起来您想将匹配的字符串限制为仅包含 6 位数字,其中必须至少包含两位小数。这意味着您最多可以在小数点左侧保留 4 位数字。
您需要一个正则表达式来匹配以下每个条件的字符串:
[.,][0-9]{2,6} // 0 digits left of point
[0-9][.,][0-9]{2,5} // 1 digits left of point
[0-9]{2}[.,][0-9]{2,4} // 2 digits left of point
[0-9]{3}[.,][0-9]{2,3} // 3 digits left of point
[0-9]{4}[.,][0-9]{2} // 4 digits left of point
因为字符串总长度与正则表达式不匹配,所以不能使右侧的长度依赖于左侧的长度。不过,如果您确实需要,可以将所有这些组合成一个正则表达式。
NSString *expression = @"^([.,][0-9]{2,6})|([0-9][.,][0-9]{2,5})|([0-9]{2}[.,][0-9]{2,4})|([0-9]{3}[.,][0-9]{2,3})|([0-9]{4}[.,][0-9]{2})$";
不过,我认为你最好这样做:
NSString *expression = @"^[0-9]*[.,][0-9]{2,6}";
然后在比较之前检查字符串的长度,确保它不大于 7
。
关于ios - 具有六个数字的正则表达式格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29215924/