Reece
Reece

Reputation: 797

Gravity form single line text field custom validation (numbers only with 10 or more digits)

Our web form built with Gravity Forms on WordPress uses a "single line text" field type for the phone number field.

How can I add a custom validation to this so that it will only allow submission of integers and only if there is 10 or more input?

This is because in Australia our phone numbers (without country code) are 10 digits. We're currently getting responses containing letters or incomplete numbers.

I've just implemented the below function but it doesn't work.

// Form Phone Field Validation to use numbers only with minimum 10 digits
add_filter( 'gform_field_validation_16_4', 'custom_validation', 10, 4 ); //Replace the ## with your form ID
function custom_validation( $result, $value, $form, $field ) {

$value = str_replace(array('(',')','-',' '),'',$value);//Remove hyphens, parenthesis, and spaces - you can take this out if you want strict numbers only

if ( $result['is_valid'] && strlen( $value ) < 10 && is_numeric( $value ) ) { 

$result['is_valid'] = false;
$result['message'] = 'Please enter a valid phone number of 10 or more digits with area code';
}
return $result;
}

Upvotes: 1

Views: 3298

Answers (2)

silver
silver

Reputation: 5311

Based on documentation

you should be doing something like this,

//replace {FORM_ID} with your form ID
add_filter( 'gform_validation_{FORM_ID}', 'custom_validation' );
function custom_validation( $response ) {
    $form = $response['form'];


    //replace {INPUT_ID} with the input ID you want to validate    
    $value = str_replace(array('(',')','-',' '), '', rgpost( 'input_{INPUT_ID}' ) );

    if ( strlen( $value ) < 10 || !is_numeric( $value ) ) { 

        $response['is_valid'] = false;

        //finding Field with ID and marking it as failed validation
        foreach( $form['fields'] as &$field ) {

            //NOTE: replace {INPUT_ID} with the field you would like to validate
            if ( $field->id == '{INPUT_ID}' ) {
                $field->failed_validation = true;
                $field->validation_message = 'Please enter a valid phone number of 10 or more digits with area code';
                break;
            }
        }

    }

    //Assign modified $form object back to the validation result
    $response['form'] = $form;
    return $response;

}

Upvotes: 2

Alexander Z
Alexander Z

Reputation: 604

Try to use function "gform_validation" to add the filter:

add_filter( 'gform_validation', 'custom_validation' );
function custom_validation( $validation_result ) {
    //your code here
}

Also see docs here

Upvotes: 0

Related Questions