我想检查一个格式为“G12-123456”的UITextField文本。
规则很简单;
第一个字符必须是大写字母。
第二和第三必须是数字
第四个必须是“ - ”字符
最后六个必须只是数字
下面的代码不起作用,匹配数总是返回零。
我也试过正则表达式为“[A-Z0-9] {3} - [0-9] {6}”
NSString * myRegex = @"[A-Z][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:myRegex
options:NSRegularExpressionCaseInsensitive
error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:string
options:NSMatchingReportProgress
range:NSMakeRange(0, [string length])];
这个使用相同的代码[^ a-zA-Z0-9] - >检查NSString是否包含特殊字符和数字。
任何帮助都将不胜感激。
答案 0 :(得分:0)
首先,基本上你的代码应该有效。
然而,两种选择都是荒谬的。如果要检查大写字母,则不得传递NSRegularExpressionCaseInsensitive
,NSMatchingReportProgress
仅影响基于块的API。
在两种情况下都通过0.
可以更高效地编写模式
NSString *myRegex = @"[A-Z]\\d{2}-\\d{6}";
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:myRegex
options:0
error:&error];
if {error) {
NSLog(@"%@", error);
} else {
NSUInteger numberOfMatches = [regex numberOfMatchesInString:string
options:0
range:NSMakeRange(0, [string length])];
NSLog(@"%lu", numberOfMatches);
}
如果正则表达式必须匹配整个字符串,请添加起始端锚点。
NSString *myRegex = @"^[A-Z]\\d(2)-\\d{6}$";
如果numberOfMatches
为零,请检查连字符是否为标准字符(ASCII 45
,十六进制0x2D
)。