刚刚面临无法编写一个好的正则表达式来满足我的需求的问题。我以前从未使用过正则表达式,所以这对我来说并不奇怪。
以下是我正在尝试验证的良好输入示例:
- 01
- 00:01
- 01:02:03
- 01:02:03:04 - 最多可使用 3 个冒号
- 123,456,789 - 最多可以有两个逗号
- 40000035
- 1:2:06
以下是不好的地方:
- ,3234
- 134,2343,333
- 000:01:00
- :01:03:00
- :01
- 01:
首先,我尝试编写一个至少涵盖所有冒号情况的代码,这就是我所拥有的:
NSUInteger numberOfMatches = -1;
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"([([0-9]{1,2}):]{1,3})([0-9]{1,2})"
options:NSRegularExpressionCaseInsensitive
error:&error];
if (error) {
NSLog(@"error %@", error);
}
numberOfMatches = [regex numberOfMatchesInString:stringToValidate
options:0
range:NSMakeRange(0, [stringToValidate length])];
我也很好奇 NSRegularExpression 是否有任何方法可以提取某种数组中经过验证的子字符串?!
例如:
12:23:63 --- 将被验证并且数组将包含 [12,23,63]
234 --- 将被验证并且数组将包含 [234]
123,235,653 --- 将被验证并且数组将包含 [123235653]
基本上,冒号分隔的输入将作为单独的值,其他所有内容将作为一个值
最佳答案
为了实现您想要的目的,我建议您对每种情况都进行一次验证。
验证
冒号:
^\d{1,2}(?::\d{1,2}){0,2}(?::\d{2})?$
逗号:
^\d{3}(?:,\d{3}){0,2}$
只是数字:
^\d+$
然后假设您通过了每个案例的验证,请使用其他方法进行数据提取。
数据提取
冒号
逗号:
只是数字:
- 嗯,这里已经有您需要的内容,因此无需进行任何更改。
关于objective-c - 在 Cocoa for osx 中使用正则表达式进行用户输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15211955/