フォーラムへの返信

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    みなさま。ありがとうございます。
    やりたいことがうまくできました。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    trim() は念のためで、文字列の末尾に空白を一つ挿入するのが目的です。
    末尾に空白を挿入することで、下記の正規表現に合わせています。
    /^([49][0-9]{11}[ | ]){1,3}$/u


    なるほど。そういうことだったのですね。
    ありがとうございます。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    なるほど。わかりました。

    インデントは最後でいいかなと思っていたのですが、その甘えがミスにつながってしました。
    ありがとうございます。今後気を付けます。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    頂いた表現のtrim( $coupon, ‘  ’ ) . ‘ ‘ ) ) が分からなかったので調べたのですが、trim関数は
    文字列の先頭・末尾にある空白(半角スペース、Tab)を除去する関数のようでした。
    どういう意味になりますでしょうか。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    /^[49][0-9]{11}([ | ][49][0-9]{11}){0,2}$/u
    なるほど。2つに分ければよかったのですね。

    text* を使っている限り ということは
    textやtel*、telなどはadd_filter(‘wpcf7_validate_○○○’ 
    を作成しなければいけないということでしょうか。
    ※○○○はtextやtel*、telなど使用しているものに合わせる。

    教えて頂いたコードに以下のように追加してみたのですが、
    送信ボタンを押した後ずっと送信待ち状態になってしまいます。
    「エラー」も「送信できました。」なども何も出ません。

    ※else if後の駄目な条件は送信できなかったのでコメントアウトしてあります。
    ※else if後の駄目な条件は電話番号なのですが、種類が多いのでとりあえず
    「00000000000」(11桁)「0000000000」(10桁)「0123456789」(10桁)の
    3種類だけエラーになるようにしたいです。
    もしかしたらいつかは正規表現を使用するかもしれないので、
    動作確認として1つ目の条件をそのまま使ってます。

    <?php
    	add_filter('wpcf7_validate_text*', 'wpcf7_validate_post', 20, 2);
    	function wpcf7_validate_post($result,$tag){
    		$name = $tag['name'];
    
    	        if ($name == 'coupon') {
     		    $coupon = $_POST[$name];
                        if(  ! preg_match_all('/^[49][0-9]{11}([ | ][49][0-9]{11}){0,2}$/u',$coupon )){
                             $result->invalidate( $tag, 'エラーになります。1' );
                        }
     	        }else if($name == 'coupon2') {
     		    $coupon = $_POST[$name];
                //if($coupon = '0000000000')
               // if(  ! preg_match_all('/^[49][0-9]{11}([ | ][49][0-9]{11}){0,2}$/u',$coupon )){
                //$result->invalidate( $tag, 'エラーになります。2' );
                        //ここに駄目な条件を書いて、そのときにエラーになるようにする
                  //  }
    	        return $result;		
                  }
                
    }
    ?>
    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    $coupon = (int) $_POST[$name]; から
    $coupon = $_POST[$name]; に変更したら
    以下の3と4は解決しました。intなどは必ずしも必要というわけではないのですね。

    3.エラーになったて欲しくないがエラーになったもの
    全角スペースが入る

    4.エラーになって欲しいがならなかったもの
    412345678901 812345678901
    412345678901 412345678901 812345678901

    また、新たなことに気が付きました。
    現状、以下の正規表現で検証しているのですが、
    /^([49][0-9]{11}[ | ]?){1,3}$/u
    この正規表現ではスペースを含まない場合も送信できてしまいます。
    1つ目と2つ目の間や2つ目と3つ目の間は必ずスペースが欲しいです。
    1つ目のみ や 2つ目や3つ目の終わりは必要ないです。

    さらに、現状にcouponとは別の項目で条件を追加したいときはどうしたらいいでしょうか。
    電話番号ハイフンなしの条件を追加したいです。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    たしかに全角を入力できるようにするにはint型ではなくstr型にする必要がありそうですね。
    その場合は
    add_filter(‘wpcf7_validate_tel*’ ではなく
    add_filter(‘wpcf7_validate_text*’ にも変更の必要がありますかね?

    しかし
    4.エラーになって欲しいがならなかったもの
    412345678901 812345678901
    412345678901 412345678901 812345678901
    の部分が謎のままです。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    <?php
    	add_filter('wpcf7_validate_tel*', 'wpcf7_validate_post', 20, 2);
    	function wpcf7_validate_post($result,$tag){
    		$name = $tag['name'];
    
    	if ($name == 'coupon') {
     		$coupon = (int) $_POST[$name];
         if(  ! preg_match_all('/^([49][0-9]{11}[ | ]?){1,3}$/u',$coupon )){
            $result->invalidate( $tag, 'エラーになりました' );
        }
     	}
    	return $result;		
    	}
    ?>

     の正規表現を使用してみました。

    1.正常に送信できたもの
    412345678901
    412345678901 412345678901
    412345678901 412345678901 412345678901
    912345678901
    912345678901 912345678901
    912345678901 912345678901 912345678901

    2.正常にエラーになったもの
    812345678901
    4123456789-01
    4123456789ー01

    3.エラーになったて欲しくないがエラーになったもの
    全角スペースが入る

    4.エラーになって欲しいがならなかったもの
    412345678901 812345678901
    412345678901 412345678901 812345678901

    のような状況になっています。

    上記の3と4はなぜ起こってしまうのでしょうか。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    shokun0803さん kimipoohさん 回答ありがとうございます。

    条件としましては
    条件1. 先頭が4,9のいずれか
    条件2. 先頭の4,9を抜いて桁数が11桁
    条件3. 条件1と2が最大3回繰り返す可能性があります。(繰り返した場合は、半角または全角スペースが入ります)
    となります。

    欲しい結果としましては、
    例1:412345678901 912345678902 412345678903
    例2:412345678901 912345678902
    例3:412345678901
    のようなものです。
    以下のようなものはエラーメッセージを表示できるようにしたいです。
    例4:412345678901 912345678902 812345678903
    例5:412345678901912345678902
    例6:412-345678901
    エラーになる理由ですが、
    例4の場合は、3つ目の数字の先頭が8になっているから
    例5の場合は、13桁目にスペースがないから
    例6の場合は、数字とスペース以外のものが入っているから
    です。
    現状、例2と例6がエラーになります。

    今まで教わったことや、調べたことを踏まえて、以下のように修正したのですが、うまくいきませんでした。

    if( ! preg_match_all(‘/^([49][0-9]{11,11})|([49][0-9]{11,11}( | )[49][0-9]{11,11})|([49][0-9]{11,11}( | )[49][0-9]{11,11}( | )[49][0-9]{11,11})$/u’,$coupon ))

    上記の条件3にもあるように繰り返されてもいいように3つ分の判定を|で分けて判定しようとしました。
    しかし、4か9の判定は1つ目の数字ブロックしかされないようでした。(上記例4)
    また、全角スペースでもはじかれてしまいます。

    さらに、正規表現チェッカーで試した結果と自身の環境で試した場合、結果が異なることがありました。
    おそらく環境の違いだと思います…

    また、電話番号のハイフンなしの正規表現を追加したいのですが、同じtel属性を追加できますか?

    • この返信は2年、 5ヶ月前にwpwp5679が編集しました。
    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    kimipooh さん 回答ありがとうございます。

    教えて頂いたポイントを踏まえましたら、動作いたしました。
    しかし、実際使用しようとしていた正規表現を入力すると、何を入力してもエラーメッセージが出るようになってしまいました。

    使用したいルール
    4か9で始まる12文字の数字 (半角or全角スペース 4か9で始まる12文字の数字 半角or全角スペース 4か9で始まる12文字の数字)
    をルールとして設けたいです。
    ※1、()内はもしあれば記入という形にしたいです。
    ※2、※1は途中で必要と気が付いたので、下記のコードには入っていないです。

    正規表現の部分は以下のように入力したのですが、うまくいきませんでした。何が間違ってますでしょうか。
    コード
    if ( ! preg_match(‘/^(4|9)\d{11}( | )(4|9)\d{11}( | )(4|9)\d{11}$/’,$coupon )) {
    $result->invalidate( $tag, ‘クーポン番号が間違っているため送信できません。’ );
    }

    また、add_filter(‘wpcf7_validate_tel*’, ‘wpcf7_validate_post’, 20, 2);
    の20と2は何の数字なのでしょうか。

    • この返信は2年、 5ヶ月前にwpwp5679が編集しました。
    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    shokun0803さん、回答ありがとうございます。
    ためしに以下のように記述したのですが、反映されてないようです。
    タグの名前はcouponになっています。

    <?php
    /**
    * contact-form-7でバリデーションを追加
    */
    add_filter('wpcf7_validate', 'wpcf7_validate_post', 11, 2);
    function wpcf7_validate_post($result,$tag){
    //$tag = new WPCF7_Shortcode($tag);
    $name = $tag['coupon'];
    //$value = isset($_POST[$name]) ? trim(wp_unslash(strtr((string) $_POST[$name], "\n", " "))) : "";
    //$nameはContactForm7のフォーム要素(input等)のname="この部分"
    //$valueはユーザーが入力した(選択した)値
    
    //ここから一つ一つのフォーム項目にバリデーションを追加します。
    if ($name == 'coupon') {
    //your-emailという名前のフォームに対して
    $coupon = (int) $_POST[$name];
    if ( preg_match('/^(8|9)[0-9]*$/',$coupon )) {
      $result->invalidate( $name, 'クーポン番号が間違っているため送信できません。' );
    }
    //if(!この部分はPHPで指定)は指定したい条件に当てはまらない(!)場合は
    }
    //ここまでが一つのフォーム項目に対して適用させるかたまり。
    return $result;
    }
    //最後にこの部分が来るようにする。
    ?>
    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について
    トピック投稿者 wpwp5679

    (@wpwp5679)

    確認したのですが、ソースコードは調べたらなんとなくわかったような気がするのですが、
    実際の使用方法がよくわかりませんでした。
    どうしたらフォームに反映できますか?

    フォーラム: 使い方全般
    返信が含まれるトピック: トップページのみHTTPSにならない
    トピック投稿者 wpwp5679

    (@wpwp5679)

    はい。
    どちらもhttps://になってます。

13件の返信を表示中 - 1 - 13件目 (全13件中)