W poniższym przykładzie pokazuję jak poprawnie zwalidować polski NIP i kod pocztowy, kiedy używamy popularnej wtyczki Contact Form 7 w Wordpressie. Post powstał na potrzeby chwili… 🙂

Dla kodu pocztowego, w functions.php dodajemy

// Add custom validation for CF7 form fields
function is_company_code($text){ // Check against list of common public email providers & return true if the email provided doesn't match one of them
if(
preg_match('/(\b\d{2}\s*-\d{3}\b)/i', $text)
){
return true; // It's a publicly available email address
}else{
return false; // It's probably a company email address
}
}

add_filter('wpcf7_validate_text', 'your_validation_filter_func', 999, 2);
 add_filter('wpcf7_validate_text*', 'your_validation_filter_func', 999, 2);
 function your_validation_filter_func($result, $tag) {
    $type = $tag['type'];
    $name = $tag['name'];

   if($name == 'kod_pocztowy'){ // Only apply to fields with the form field name of "comany-email"
   $the_value = $_POST[$name];
   if(!is_company_code($the_value)){ // Isn't a company email address (it matched the list of free email providers)
   $result['valid'] = false;
   $result->invalidate($tag, wpcf7_get_message('invalid_coupon_code'));
   }
   }
  return $result;
}



add_filter('wpcf7_messages', 'customwpcf7_text_messages');

function customwpcf7_text_messages($messages) {
    return array_merge($messages, array(
'invalid_coupon_code' => array(
     'default' => __('Kod jest niewłaściwy', 'contact-form-7')
  )

));
}

, gdzie ‚kod_pocztowy’ to nazwa walidowanego pola w CF7.

Dla NIP-u metdyka jest dość symilarna:

// Add custom validation for CF7 form fields
function is_company_nip($text){ // Check against list of common public email providers & return true if the email provided doesn't match one of them
$valid = false;
    $weights = array( 6, 5, 7, 2, 3, 4, 5, 6, 7 );
    $nip = preg_replace( '/^PL/', '', $text );
    if( strlen( $nip ) == 10 && is_numeric( $nip ) ) {
        $sum = 0;
        for( $i = 0; $i < 9; $i++ )
            $sum += $nip[$i] * $weights[$i];
        $valid = ( $sum % 11 ) == $nip[9];
        return true; // It's a publicly available email address
    }

else {
return false; // It's probably a company email address
}
}

add_filter('wpcf7_validate_text', 'validation_nip', 999, 2);
add_filter('wpcf7_validate_text*', 'validation_nip', 999, 2);
 function validation_nip($result, $tag) {
    $type = $tag['type'];
    $name = $tag['name'];

   if($name == 'nip'){ // Only apply to fields with the form field name of "comany-email"
   $the_value = $_POST[$name];
   if(!is_company_nip($the_value)){ // Isn't a company email address (it matched the list of free email providers)
   $result['valid'] = false;
   $result->invalidate($tag, wpcf7_get_message('invalid_nip'));
   }
   }
  return $result;
}



add_filter('wpcf7_messages', 'customnip_text_messages');

function customnip_text_messages($messages) {
    return array_merge($messages, array(
'invalid_nip' => array(
     'default' => __('Pole jest wypełnione niepoprawnie. Wpisz polski numer NIP bez spacji i myślników.', 'contact-form-7')
  )

));
}

Tutaj analogicznie ‚nip’ jest nazwą pola w CF7.