The gform_field_validation filter in Gravity Forms allows you to create custom validation logic for a field.
Usage
You can use this filter for all forms and all fields like so:
add_filter( 'gform_field_validation', 'your_function_name', 10, 4 );
You can target all fields in a specific form:
// This targets all fields in form 6 add_filter( 'gform_field_validation_6', 'your_function_name', 10, 5 );
Or you can target a specific field in a specific form:
// This targets field 1 in form 6 add_filter( 'gform_field_validation_6_1', 'your_function_name', 10, 5 );
Parameters
- $result (array): The validation result to be filtered. For example: array( ‘is_valid’ => false, ‘message’ => ‘Please enter a number greater than 10’ )
- $value (string | array): The field value to be validated. Multi-input fields like Address will pass an array of values.
- $form (Form Object): Current form object.
- $field (Field Object): Current field object.
- $context (string): The context for the current submission. Available since Gravity Forms 2.6.3.2. Possible values: form-submit, api-submit, or api-validate.
More information
See Gravity Forms Docs: gform_field_validation
Examples
Number Field Validation
This example validates a field so that only numbers less than 10 are allowed.
add_filter( 'gform_field_validation_175_1', 'custom_validation', 10, 4 );
function custom_validation( $result, $value, $form, $field ) {
if ( $result['is_valid'] && intval( $value ) > 10 ) {
$result['is_valid'] = false;
$result['message'] = 'Please enter a value less than 10';
}
return $result;
}
User Defined Price Field Validation
This example validates a User Defined Price field to make sure the user entered an amount of at least $0.50.
add_filter( 'gform_field_validation_96_23', 'gf_user_defined_price_validation', 10, 4 );
function gf_user_defined_price_validation( $result, $value, $form, $field ) {
$number = GFCommon::to_number( $value, '' );
if ( $result['is_valid'] && $number < 0.50 ) {
$result['is_valid'] = false;
$result['message'] = 'You must enter at least $0.50';
}
return $result;
}
Address Field Validation
This example validates the address field to control which parts are required. Only the street, city, and state are required in this example.
add_filter( 'gform_field_validation_362_1', 'custom_address_validation', 10, 4 );
function custom_address_validation( $result, $value, $form, $field ) {
if ( 'address' === $field->type && $field->isRequired ) {
// Check to see if the values you care about are filled out
$required_inputs = array(
'1' => $street,
'3' => $city,
'4' => $state
);
$empty_input = false;
foreach ( $required_inputs as $input_number => $input_value ) {
if ( empty( $input_value ) && ! $field->get_input_property( $input_number, 'isHidden' ) ) {
$field->set_input_validation_state( $input_number, false );
$empty_input = true;
}
}
if ( $empty_input ) {
$result['is_valid'] = false;
$result['message'] = empty( $field->errorMessage ) ? 'This field is required. Please enter at least a street, city, and state.' : $field->errorMessage;
} else {
$result['is_valid'] = true;
$result['message'] = '';
}
}
return $result;
}
ZIP Code Validation
This example validates the zip input of field 1 on form 2.
add_filter( 'gform_field_validation_2_1', 'custom_zip_validation', 10, 4 );
function custom_zip_validation( $result, $value, $form, $field ) {
if ( $result['is_valid'] ) {
$acceptable_zips = array( '123', '456', );
$zip_value = rgar( $value, $field->id . '.5' );
if ( ! in_array( $zip_value, $acceptable_zips ) ) {
$field->set_input_validation_state( 5, false );
$result['is_valid'] = false;
$result['message'] = 'Zip validation failed.';
}
}
return $result;
}