WC_Validation::is_postcode PHP Method

is_postcode() public static method

Checks for a valid postcode.
public static is_postcode ( $postcode, $country ) : boolean
return boolean
    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);
    }

Usage Example

 /**
  * Calculate shipping for the cart
  */
 public static function calculate_shipping()
 {
     try {
         WC()->shipping->reset_shipping();
         $country = wc_clean($_POST['calc_shipping_country']);
         $state = wc_clean(isset($_POST['calc_shipping_state']) ? $_POST['calc_shipping_state'] : '');
         $postcode = apply_filters('woocommerce_shipping_calculator_enable_postcode', true) ? wc_clean($_POST['calc_shipping_postcode']) : '';
         $city = apply_filters('woocommerce_shipping_calculator_enable_city', false) ? wc_clean($_POST['calc_shipping_city']) : '';
         if ($postcode && !WC_Validation::is_postcode($postcode, $country)) {
             throw new Exception(__('Please enter a valid postcode/ZIP.', 'woocommerce'));
         } elseif ($postcode) {
             $postcode = wc_format_postcode($postcode, $country);
         }
         if ($country) {
             WC()->customer->set_location($country, $state, $postcode, $city);
             WC()->customer->set_shipping_location($country, $state, $postcode, $city);
         } else {
             WC()->customer->set_to_base();
             WC()->customer->set_shipping_to_base();
         }
         WC()->customer->calculated_shipping(true);
         wc_add_notice(__('Shipping costs updated.', 'woocommerce'), 'notice');
         do_action('woocommerce_calculated_shipping');
     } catch (Exception $e) {
         if (!empty($e)) {
             wc_add_notice($e->getMessage(), 'error');
         }
     }
 }
All Usage Examples Of WC_Validation::is_postcode