如何在iOS中验证美国或加拿大的Zipcode?

时间:2012-10-15 13:16:32

标签: objective-c ios regex

我想知道有没有办法验证美国邮政编码或加拿大邮政编码?我试过使用正则表达式。 喜欢美国

- (BOOL)validateZip:(NSString *)candidate {
    NSString *emailRegex = @"(^{5}(-{4})?$)|(^[ABCEGHJKLMNPRSTVXY][A-Z][- ]*[A-Z]$)";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 

    return [emailTest evaluateWithObject:candidate];   
}

但它没有用。请任何机构对此验证有任何想法。如果有任何其他api用于验证吗?请尽可能指导我?

2 个答案:

答案 0 :(得分:12)

对于美国,您的量词({5}{4}?)是正确的,但忘记准确指定您要量化的内容。你想要:

(^[0-9]{5}(-[0-9]{4})?$)

对于加拿大,根据维基百科,格式为A0A 0A0,所以我会这样做:

(^[a-zA-Z][0-9][a-zA-Z][- ]*[0-9][a-zA-Z][0-9]$)

现在,我将编写完整的表达式,并启用不区分大小写:

@"^(\\d{5}(-\\d{4})?|[a-z]\\d[a-z][- ]*\\d[a-z]\\d)$"
坦率地说,我实际上并不熟悉Objective C或iOS,遗憾的是我没有测试过上述内容。但是,之前我见过这样的帖子提到NSRegularExpression,这在您的代码中缺失,但可能没有必要。看看其他人的例子,看看你可能会犯的其他简单错误。祝你好运。

答案 1 :(得分:1)

我们使用了这个,但它仅用于英国邮政编码。请参阅@ acheong87答案以更改正则表达式以符合您的标准和其他好的答案。

NSString *postcodeRegex = @"[A-Z]{1,2}[0-9R][0-9A-Z]?([0-9][ABD-HJLNP-UW-Z]{2}";//WITH SPACES
NSPredict *postcodeValidate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", postcodeRegex];

if ([postcodeValidate evaluateWithObject:postcodeField.text] == YES) {  
     NSLog (@"Postcode is Valid");  
} else {  
     NSLog (@"Postcode is Invalid");    
}

我建议您先使用这个出色的工具http://www.regexr.com

测试正则表达式

修改

当前的正则表达式在进一步测试后不支持邮政编码中的空格。这将解决这个问题。

NSString *postcodeRegex = @"[A-Z]{1,2}[0-9R][0-9A-Z]?(\s|)([0-9][ABD-HJLNP-UW-Z]{2}";//WITH SPACES