objective-c - 在 Cocoa for osx 中使用正则表达式进行用户输入验证

标签 objective-c regex macos cocoa validation

刚刚面临无法编写一个好的正则表达式来满足我的需求的问题。我以前从未使用过正则表达式,所以这对我来说并不奇怪。

以下是我正在尝试验证的良好输入示例:

  • 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/

相关文章:

java - 算术表达式的正则表达式

ios - UIActivityViewController 显示 ios objective-c

iphone - 调用-createDirectoryAtURL : causes crash

objective-c - Mac OS 命令行工具处理异步导出视频以进行重新编码(已编辑并正在运行)

iphone - 方向改变时重新定位控件

macos - 如果我将 Haskell Platform (2013.2.0.0) 与 GHC (7.6.3) 一起使用,是否可以安装 Xcode 5?

regex - 是否可以使用 Eclipse 的正则表达式搜索和替换转换为小写?

javascript - 根据关键字(和)分割字符串,除非引用 ('... and ...' )

swift - 缩放图像 OSX Swift

macos - OSX 力反馈驱动程序