Используя этот код, который отлично работает, если пользователь вводит все заглавные буквы. Однако мне нужно автоматически принимать строчные буквы и регистр предложений как допустимые значения для ввода пользователем. В настоящее время это не работает, есть идеи?

add_filter( 'gform_field_validation_17_4', 'custom_validation', 10, 4 );
function custom_validation( $result, $value, $form, $field ) {
    $arrWhitelist = array('KNITS10', 'KATNA20');
    if ( $result['is_valid'] && !in_array( $value, $arrWhitelist )) {
        $result['is_valid'] = false;
        $result['message'] = 'Incorrect code';
    }
    return $result;
}
php
0
JoaMika 20 Сен 2018 в 01:18

2 ответа

Лучший ответ

Используйте strtoupper (), чтобы пользовательский ввод совпадал с вашим:

add_filter( 'gform_field_validation_17_4', 'custom_validation', 10, 4 );
function custom_validation( $result, $value, $form, $field ) {
    $arrWhitelist = array('KNITS10', 'KATNA20');
    if ( $result['is_valid'] && !in_array( strtoupper($value), $arrWhitelist )) {
        $result['is_valid'] = false;
        $result['message'] = 'Incorrect code';
    }
    return $result;
}
2
user10226920user10226920 19 Сен 2018 в 22:22

Вы также можете использовать strcasecmp (), но более чистый вариант в этом сценарии будет будь энергичным.

Результирующий код с использованием strcasecmp будет:

    function custom_validation($result, $value, $form, $field)
    {
        $arrWhitelist = array('KNITS10', 'KATNA20');
        array_walk(
            $arrWhitelist, function ($item) use ($value, $result) {
            if (strcasecmp($item, $value) === 0) {
                $result['is_valid'] = false;
                $result['message'] = 'Incorrect code';
            }
        }
        );
        return $result;
    }
0
Guilherme Cunha Eloi Santos 19 Сен 2018 в 23:38