public static function is_postcode($postcode, $country)
{
if (strlen(trim(preg_replace('/[\\s\\-A-Za-z0-9]/', '', $postcode))) > 0) {
return false;
}
switch ($country) {
case 'AT':
$valid = (bool) preg_match('/^([0-9]{4})$/', $postcode);
break;
case 'BR':
$valid = (bool) preg_match('/^([0-9]{5})([-])?([0-9]{3})$/', $postcode);
break;
case 'CH':
$valid = (bool) preg_match('/^([0-9]{4})$/i', $postcode);
break;
case 'DE':
$valid = (bool) preg_match('/^([0]{1}[1-9]{1}|[1-9]{1}[0-9]{1})[0-9]{3}$/', $postcode);
break;
case 'ES':
$valid = (bool) preg_match('/^([0-9]{5})$/i', $postcode);
break;
case 'GB':
$valid = self::is_GB_postcode($postcode);
break;
case 'JP':
$valid = (bool) preg_match('/^([0-9]{3})([-])([0-9]{4})$/', $postcode);
break;
case 'PT':
$valid = (bool) preg_match('/^([0-9]{4})([-])([0-9]{3})$/', $postcode);
break;
case 'US':
$valid = (bool) preg_match('/^([0-9]{5})(-[0-9]{4})?$/i', $postcode);
break;
case 'CA':
// CA Postal codes cannot contain D,F,I,O,Q,U and cannot start with W or Z. https://en.wikipedia.org/wiki/Postal_codes_in_Canada#Number_of_possible_postal_codes
$valid = (bool) preg_match('/^([ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ])([\\ ])?(\\d[ABCEGHJKLMNPRSTVWXYZ]\\d)$/i', $postcode);
break;
case 'PL':
$valid = (bool) preg_match('/^([0-9]{2})([-])([0-9]{3})$/', $postcode);
break;
default:
$valid = true;
break;
}
return apply_filters('woocommerce_validate_postcode', $valid, $postcode, $country);
}