# Does not contain logic

**URL:** <https://community.gravityforms.com/t/does-not-contain-logic/14932>\
**Category:** Get Help\
**Tags:** gform\_field\_validation, zip-code, advanced-conditional-logic, chatgpt, conditional-logic, gform\_validation\
**Created:** [April 14, 2023, 10:29am UTC](https://community.gravityforms.com/t/does-not-contain-logic/14932 "2023-04-14T10:29:33Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![user5a096b2969b522.0](https://sea2.discourse-cdn.com/flex020/user_avatar/community.gravityforms.com/user5a096b2969b522.0/32/5691_2.png) [@user5a096b2969b522.0](https://community.gravityforms.com/u/user5a096b2969b522.0)\
**Post date:** [April 14, 2023, 10:29am UTC](https://community.gravityforms.com/t/does-not-contain-logic/14932/1 "2023-04-14T10:29:33Z")

</div>

I can see that on page conditions, there is no option for ‘does not contain’ which I really need for my use case.

I am trying to work around it by doing a custom validation on a postcode field instead

This example looks like it will work, but it just needs modifying to fail if part of the ‘zips’ string arrays do not exist in the field.

In other words, I want validation to succeed if 123 999 is put in, or 123999, or 456 XYZ or 456XYZ and fail if anything else is put in.

I hope this makes some kind of sense.

```auto
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 ); // Only for Gravity Forms 2.5.10 or higher.
            $result['is_valid'] = false;
            $result['message'] = 'Zip validation failed.';
        }
    }
 
    return $result;
}

```

---

<div class="post-metadata">

**Author:** ![faisalahammad](https://sea2.discourse-cdn.com/flex020/user_avatar/community.gravityforms.com/faisalahammad/32/13948_2.png) [@faisalahammad](https://community.gravityforms.com/u/faisalahammad)\
**Post date:** [April 14, 2023, 5:53pm UTC](https://community.gravityforms.com/t/does-not-contain-logic/14932/2 "2023-04-14T17:53:38Z")

</div>

Give it a try, and let me know how that goes! 😄

```auto
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 = preg_replace('/\s+/', '', rgar( $value, $field->id . '.5' )); // Remove any whitespace characters from the postcode field
 
        $valid = false;
        foreach ($acceptable_zips as $zip) {
            if (strpos($zip_value, $zip) !== false) {
                $valid = true;
                break;
            }
        }
 
        if ( ! $valid ) {
            $field->set_input_validation_state( 5, false ); // Only for Gravity Forms 2.5.10 or higher.
            $result['is_valid'] = false;
            $result['message'] = 'Zip validation failed.';
        }
    }
 
    return $result;
}

```

---

<div class="post-metadata">

**Author:** ![user5a096b2969b522.0](https://sea2.discourse-cdn.com/flex020/user_avatar/community.gravityforms.com/user5a096b2969b522.0/32/5691_2.png) [@user5a096b2969b522.0](https://community.gravityforms.com/u/user5a096b2969b522.0)\
**Post date:** [April 18, 2023, 3:54pm UTC](https://community.gravityforms.com/t/does-not-contain-logic/14932/3 "2023-04-18T15:54:19Z")

</div>

Hi, thanks for this. I tried it but I can’t seem to have validation succeed.

In the context of your code if I try inputing 123 or 123 XYZ it gives me Zip validation failed.

---

<div class="post-metadata">

**Author:** ![user5a096b2969b522.0](https://sea2.discourse-cdn.com/flex020/user_avatar/community.gravityforms.com/user5a096b2969b522.0/32/5691_2.png) [@user5a096b2969b522.0](https://community.gravityforms.com/u/user5a096b2969b522.0)\
**Post date:** [April 19, 2023, 3:55pm UTC](https://community.gravityforms.com/t/does-not-contain-logic/14932/5 "2023-04-19T15:55:28Z")

</div>

If anyone is interested, I got this working via a chatGPT generated code of the below.

I probably wasn’t very clear on what I was after but essentially this code…

- targets a form ID
- targets a field ID
- checks if any of what is put in the targeted (text) field contains any of the array strings in any part of the input string
- if it doesn’t shows the validation message

```auto
add_filter( 'gform_validation', 'check_input_contains_strings', 10, 2 );
function check_input_contains_strings( $validation_result, $form ) {
	$target_form_id = 1;
    $target_field_id = 1;
    $target_strings = array( '123', '456', 'XYZ' );
    $field = GFFormsModel::get_field( $target_form_id, $target_field_id );
    if ( $field && $field->type == 'text' ) {
        $input_value = rgpost( 'input_' . $target_field_id );
        foreach ( $target_strings as $string ) {
            if ( stripos( $input_value, $string ) !== false ) {
                return $validation_result;
            }
        }
        // None of the target strings were found in the input value, so fail validation.
        $validation_result['is_valid'] = false;
        $field->failed_validation = true;
        $field->validation_message = "your zip code does not contain required characters";
    }
    return $validation_result;
}

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex020/uploads/gravityforms1/original/2X/f/fef63f0599c45e0218c30d9f5d7ca8bff9b00189.png) [@system](https://community.gravityforms.com/u/system)\
**Post date:** [May 19, 2023, 3:55pm UTC](https://community.gravityforms.com/t/does-not-contain-logic/14932/6 "2023-05-19T15:55:58Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.

---

<div class="post-metadata">

**Author:** ![david](https://sea2.discourse-cdn.com/flex020/user_avatar/community.gravityforms.com/david/32/2517_2.png) [@david](https://community.gravityforms.com/u/david)\
**Post date:** [May 1, 2025, 1:35am UTC](https://community.gravityforms.com/t/does-not-contain-logic/14932/7 "2025-05-01T01:35:10Z")

</div>

Good stuff, Theo!

We just wrote a snippet that adds this option directly to Gravity Forms’ conditional logic operators in case anyone else needs to do something similar.

> **[Conditional Logic Operator: "Does Not Contain" | Gravity Wiz Snippet Library](https://gravitywiz.com/snippet-library/gw-conditional-logic-operator-does-not-contain/)**
>
> Adds support for the "does not contain" conditional logic operator in Gravity Forms.
