【问题标题】:Gravity form single line text field custom validation (numbers only with 10 or more digits)重力形式单行文本字段自定义验证(仅具有 10 位或更多位的数字)
【发布时间】:2018-01-09 11:44:18
【问题描述】:

我们在 WordPress 上使用 Gravity Forms 构建的 Web 表单对电话号码字段使用“单行文本”字段类型。

我怎样才能为此添加自定义验证,以便它只允许提交整数并且只有在有 10 个或更多输入时才允许提交?

这是因为在澳大利亚,我们的电话号码(不含国家代码)是 10 位数字。我们目前收到的回复包含字母或不完整的数字。

我刚刚实现了以下功能,但它不起作用。

// 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;
}

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    基于documentation

    你应该做这样的事情,

    //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;
    
    }
    

    【讨论】:

    • 这会导致页面重新加载,并将 /#gf_16 附加到 URL,并且页面完全是白色的,没有 HMTL。我将16 用于{FORM_ID}16_4 用于您拥有的两个{INPUT_ID} 变量。这是不正确的还是其他东西会破坏表单提交?
    • 16_4 错误,不能是 ID,ID 只能是数字,转到重力 -> 表单编辑器,如果将鼠标悬停在字段上,您应该会看到字段 ID,如果你参考他们正在做的文档$field-&gt;id == '{INPUT_ID}' 其中{INPUT_ID} 是一个值为1的数字
    • 啊,谢谢。我正在使用代码检查来获取 input_16_4。您的代码运行良好。有没有办法让它允许国际号码的加号(+)?
    • 在字符串替换上添加 + 符号以在检查值是否为数字之前将其删除,就像您对空格和括号所做的那样
    • 这对我的项目有帮助。谢谢:D
    【解决方案2】:

    尝试使用函数“gform_validation”添加过滤器:

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

    另见docs here

    【讨论】:

      猜你喜欢
      • 2014-10-28
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多