为什么这个正则表达式会阻止小于13但不是空白条目的条目?

时间:2014-08-13 09:30:57

标签: objective-c regex

如果用户输入1-12个字符,则验证有效,但如果用户输入空白表达式则无效。为什么呢?

 + (BOOL)validateCardNumberWithString:(NSString*)number {
        NSString *numberRegex = [NSString stringWithFormat:@"^(\\d{13})?$"];
        NSPredicate *numberTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", numberRegex];
        return [numberTest evaluateWithObject:number];
    }

2 个答案:

答案 0 :(得分:3)

正则表达式中的?表示您可以拥有0或1个表达式。由于空白对您无效,因此应将其删除。

同样根据您的说明,如果您想要1到13位数,则听起来像是@"^\\d{1,13}$",因为\d{13}表示正好是13位数。

答案 1 :(得分:2)

对于小于 13位数,您需要使用此正则表达式:

^(\d{1,12})$

此处{1,12}是一个量词,匹配包括1到12次的数字(非可选)。

pix