? canadian.patch
Index: zipcode.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/zipcode/zipcode.module,v
retrieving revision 1.7
diff -u -p -r1.7 zipcode.module
--- zipcode.module	26 Dec 2006 11:48:55 -0000	1.7
+++ zipcode.module	24 Apr 2007 06:03:12 -0000
@@ -198,7 +198,7 @@ function zipcode_widget($op, &$node, $fi
                 form_set_error($field['field_name'],t('"%value" is not a valid french zipcode<br>Zipcodes should only contains 4 or 5 numbers',array('%value' => $item['value'])));
               }
               if ($field['type'] == 'ca_zipcode' && !valid_ca_zipcode($item['value'])) {
-                form_set_error($field['field_name'],t('"%value" is not a canadian valid zipcode<br>Zipcodes should be like Z5Z-5Z5 orZ5Z5Z5 ...',array('%value' => $item['value'])));
+                form_set_error($field['field_name'],t('"%value" is not a valid Canadian postal code, it should be like A1A 1A1 or A1A1A1',array('%value' => $item['value'])));
               }
               if ($field['type'] == 'us_zipcode' && !valid_us_zipcode($item['value'])) {
                 form_set_error($field['field_name'],t('"%value" is not a valid us zipcode<br>Zipcodes should be like 99999 or 99999-9999 ...',array('%value' => $item['value'])));
@@ -239,10 +239,10 @@ function valid_ca_zipcode($zipcodestring
 
   $zipcodestring = trim($zipcodestring);
 
-  if (!preg_match("/^\D{1}\d{1}\D{1}\-?\d{1}\D{1}\d{1}/i",$zipcodestring)) { 
+  if (!preg_match("/^\D{1}\d{1}\D{1}\ ?\d{1}\D{1}\d{1}/i",$zipcodestring)) { 
   	return false; 
   }
-  //Z5Z-5Z5 orZ5Z5Z5 
+  //Z5Z 5Z5 or Z5Z5Z5 
   else 
   {
 	return true;
@@ -295,6 +295,19 @@ function format_fr_zipcode($zipcodestrin
 function format_ca_zipcode($zipcodestring) {
 
   $zipcodestring = trim($zipcodestring);
+  
+  $zipcodestring = strtoupper($zipcodestring);
+  
+  if (strlen($zipcodestring) == 6) {
+    $zipcodestring = substr($zipcodestring, 0, 3) . ' ' . substr($zipcodestring, 3, 3);
+  }
+  
+  return $zipcodestring;
+}
+
+function format_us_zipcode($zipcodestring) {
+
+  $zipcodestring = trim($zipcodestring);
   //do some formatting 
   return $zipcodestring;
 }
@@ -312,4 +325,4 @@ function format_nl_zipcode($zipcodestrin
   //do some formatting: make letters upper case and put space between numbers and letters
   $zipcodestring = preg_replace("/(\d{4})\s*(\w{2})/","$1 $2",strtoupper($zipcodestring));
   return $zipcodestring;
-}
\ No newline at end of file
+}
