programing

문의폼7 - 커스텀 검증

css3 2023. 3. 1. 11:25

문의폼7 - 커스텀 검증

소문자 ASCII 문자와 숫자만 사용하려면 하나의 필드('인스턴스'라고 함)만 검증해야 합니다. 첫 번째 문자는 숫자가 아닌 문자여야 합니다.대문자는 사용할 수 있지만 입력할 때는 소문자로 입력해야 합니다.따라서 누군가가 맥도날드라는 인스턴스 이름을 사용하는 경우 맥도날드(CSS뿐만 아니라)로 소문자가 지정됩니다.공백도 사용할 수 없습니다.

CF7에서도 가능합니까?그렇다면 방법을 설명해 주세요.

이 커스텀 검증 방법은 이미 시도해 보았습니다만, 파일에 프리셋의 커스텀 검증을 실시해도, 필드 자체가 아니고, 필드 쇼트 코드만을 표시하고 있었습니다.

감사해요.

contactform7.com에서 Custom Validation Validation as a Filter(필터로서의 검증)를 참조해 주세요.

Contact Form 7 에서는, 필터 기능으로서 유저 입력의 검증이 실장됩니다.검증에 사용되는 필터 후크는 폼 태그 유형에 따라 다르며 wpcf7_validate_ + {type of form-tag}로 결정됩니다.따라서 텍스트 폼태그에는 필터 후크 wpcf7_validate_text 가 사용됩니다.마찬가지로 wpcf7_validate_email*도 이메일* 폼태그에 사용됩니다.

다음과 같은 전자 메일 필드가 폼에 있다고 가정합니다.

  Email:         [email* your-email]
  Confirm email: [email* your-email-confirm]

다음 목록에는 두 필드의 값이 동일한지 여부를 확인하는 코드가 나와 있습니다.

add_filter('wpcf7_validate_email*', 'custom_email_confirmation_validation_filter', 20, 2);

function custom_email_confirmation_validation_filter($result, $tag) {
    $tag = new WPCF7_FormTag($tag);

    if ('your-email-confirm' == $tag->name) {
        $your_email = isset($_POST['your-email']) ? trim($_POST['your-email']) : '';
        $your_email_confirm = isset($_POST['your-email-confirm']) ? trim($_POST['your-email-confirm']) : '';

        if ($your_email != $your_email_confirm) {
            $result->invalidate($tag, "Are you sure this is the correct address?");
        }
    }
    return $result;
}

두 개의 파라미터가 필터 함수에 전달됩니다.$result그리고.$tag.$result의 예다.WPCF7_Validation일련의 검증 프로세스를 관리하는 클래스입니다. $tag는 지정된 폼태그 컴포넌트로 구성된 어소시에이션 배열입니다.앞의 레시피에서 보셨듯이 를 사용할 수 있습니다.WPCF7_FormTag이 유형의 데이터를 처리하는 클래스입니다.

필터 기능 내부를 살펴봅니다.먼저 폼태그의 이름을 체크하고 검증이 특정 필드에만 적용되는지 확인합니다( ).your-email-confirm).

그런 다음 두 전자 메일 필드 값을 비교하고 일치하지 않으면$result->invalidate()호출됩니다.2개의 파라미터를 전달해야 합니다.invalidate()method: 첫 번째 파라미터는 다음과 같습니다.$tag두 번째 파라미터는 필드에 표시하는 검증 오류 메시지입니다.

마지막으로, 잊지 말고 반품해 주세요.$result.

// CF7 폼필드에 커스텀 검증 추가

function is_company_email($email){ // Check against list of common public email providers & return true if the email provided *doesn't* match one of them
        if(
                preg_match('/@gmail.com/i', $email) ||
                preg_match('/@hotmail.com/i', $email) ||
                preg_match('/@live.com/i', $email) ||
                preg_match('/@msn.com/i', $email) ||
                preg_match('/@aol.com/i', $email) ||
                preg_match('/@yahoo.com/i', $email) ||
                preg_match('/@inbox.com/i', $email) ||
                preg_match('/@gmx.com/i', $email) ||
                preg_match('/@me.com/i', $email)
        ){
                return false; // It's a publicly available email address
        }else{
                return true; // It's probably a company email address
        }
}
function your_validation_filter_func($result,$tag){
        $type = $tag['type'];
        $name = $tag['name'];
        if('yourid' == $value){ // Only apply to fields with the form field name of "company-email"
                $the_value = $_POST[$name];
                if(!is_company_email($the_value)){ // Isn't a company email address (it matched the list of free email providers)
                        $result['valid'] = false;
                        $result->invalidate( $tag, wpcf7_get_message( 'invalid_email' ));
                }
        }
        return $result;
}

 add_filter( 'wpcf7_validate_email', 'your_validation_filter_func', 10, 2 ); 

// Email field or contact number field
  add_filter( 'wpcf7_validate_email*', 'your_validation_filter_func', 10, 2 );     // Req. Email field or contact number

이름 필드의 유효성에 대해서도 같은 문제가 있었습니다.다음 코드를 함수에 추가했습니다.php, regex를 변경하여 커스터마이즈 할 수 있습니다.

function my_wpcf7_validate_text( $result, $tag ) {

    $type = $tag['type'];
    $name = $tag['name'];
    $value = $_POST[$name] ;

    if ( strpos( $name , 'name' ) !== false ){
        $regex = '/^[a-zA-Z]+$/';
        $Valid = preg_match($regex,  $value, $matches );
        if ( $Valid > 0 ) {
        } else {
            $result->invalidate( $tag, wpcf7_get_message( 'invalid_name' ) );
        }
    }
    return $result;
}
add_filter( 'wpcf7_validate_text*', 'my_wpcf7_validate_text' , 10, 2 );

add_filter( 'wpcf7_messages', 'mywpcf7_text_messages' );
function mywpcf7_text_messages( $messages ) {
    return array_merge( $messages, array(
        'invalid_name' => array(
            'description' => __( "Name is invalid", 'contact-form-7' ),
            'default' => __( 'Name seems invalid.', 'contact-form-7' )
        )
    ));
}

이 워드프레스 플러그인을 사용하십시오.

연락처 폼7의 Jquery 검증 https://wordpress.org/plugins/jquery-validation-for-contact-form-7/

인 커스텀 할 수 .add_filter★★★★★★ 。

textarea에는 다음과 같은 수 있습니다.functions.php파일을 테마의 루트 디렉토리에 저장합니다.

add_filter( 'wpcf7_validate_textarea*', 'custom_textarea_validation_filter', 1, 2 );

function custom_textarea_validation_filter( $result, $tag ) {
  $tag = new WPCF7_Shortcode($tag);
  $result = (object)$result;

  $name = 'project-synopsis';

  if ( $name == $tag->name ) {
    $project_synopsis = isset( $_POST[$name] ) ? trim( wp_unslash( (string) $_POST[$name] ) ) : '';

    if ( empty( $project_synopsis ) ) {
      $result->invalidate( $tag, "Please write a quick project synopsis." );
    }
  }

  return $result;
}

the the the를 하는 이 요령이었다.$result 변수입니다. 이 매개 변수는 객체에 대한 매개 변수입니다.invalidate에러 메시지를 추가하는 방법이 캐스팅 전에 작동하지 않았습니다.

이 플러그인을 사용해 보세요.무료 버전에서는 필드별로 커스텀 확인 메시지를 설정할 수 있습니다.URL : https://wordpress.org/plugins/cf7-custom-validation-message/

언급URL : https://stackoverflow.com/questions/22858288/contact-form-7-custom-validation