2012-10-15 73 views
4

我想知道是否有任何方法來驗證美國或加拿大郵政編碼的郵政編碼?我試圖使用正則表達式。 像美國如何在iOS中驗證美國或加拿大的Zipcode?

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

    return [emailTest evaluateWithObject:candidate]; 
} 

,但它不是working.Please任何身體有什麼想法,對此validation.if任何REST API是有合理性呢?請儘可能指導我?

+0

檢查[這個答案](http://stackoverflow.com/a/11230585/529363) – ender

+0

**對於雨燕3.0 **點擊網址http://stackoverflow.com/a/44038538/ 4402354 –

回答

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)$" 

坦率地說,我並不真正熟悉目標C或iOS,而可悲的是我沒有測試以上。不過,以前我見過這樣的帖子提到NSRegularExpression,這在代碼中是缺少的,但也許沒有必要。看看別人的例子,看看你可能會做出哪些其他簡單的錯誤。祝你好運。

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 
+0

這項工作適用於英國的所有郵政編碼? – magid

+0

我在商業應用程序中使用過這個功能,因此從未聽說過任何問題。 –

+0

我輸入了M22 0XC,它表示無效的郵政編碼 – magid

相關問題