我想知道有没有办法验证美国邮政编码或加拿大邮政编码?我试过使用正则表达式。 喜欢美国
- (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用于验证吗?请尽可能指导我?
答案 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