0
0

More than 3 years have passed since last update.

Wordpress MW WP formプラグインの電話番号 半角数字バリデーション不備問題

Last updated at Posted at 2021-08-10

Wordpress MW WP formプラグインの電話番号 半角数字バリデーション不備問題

Wordpressでメール送信機能を実装する際に、MW WP formプラグインで簡単に実装できる。しかし、
xxx-xxx-xxxのような電話番号で、半角数字のバリデーションを指定したところ、半角数字を入力したにもかからわず、半角数字と認識されずエラーメッセージが表示される場合がある。
解決方法を示したサイトが他なかったので、ここでその原因と暫定処置ではあるが解決方法を示す。

環境の整理

  • Wordpress 5.8
  • MW WP Form プラグイン 4.4.0

WP管理画面

1.MW WP Form にて、name="tel"というフォームタグがあるとする。
スクリーンショット 2021-08-11 070946.jpg
2.telのバリデーションは「半角数字」を指定したとする。
スクリーンショット 2021-08-11 071856.jpg

3.ブラウザ画面では以下
スクリーンショット 2021-08-11 071938.jpg

原因

半角数字を判定する箇所は
wp-content\plugins\mw-wp-form\classes\validation-rules\class.numeric.php
ここに以下のような記載がある

class.numeric.php
    public function rule( $name, array $options = array() ) {
        $value = $this->Data->get( $name );

        if ( MWF_Functions::is_empty( $value ) ) {
            return;
        }

        if ( preg_match( '/^[0-9]+$/', $value ) ) {
            return;
        }

        $defaults = array(
            'message' => __( 'Please enter with a half-width number.', 'mw-wp-form' ),
        );
        $options  = array_merge( $defaults, $options );
        return $options['message'];
    }

そうだ。原因は以下の判定にある。

class.numeric.php
        if ( preg_match( '/^[0-9]+$/', $value ) ) {
            return;
        }

今回電話番号はxxx-xxx-xxx、$value = "xxx-xxx-xxx"となる。
なので、if文でfalse結果となる。

解決方法

以下のコードにより、
name="tel"の場合のみ、xxx-xxx-xxxの半角数字判定を行うことができる。

class.numeric.php
    if($name == "tel") {
      $val = $value;
      if (preg_match('/^[0-9]+-[0-9]+-[0-9]+/', $val)) {
        return;
      }
    } else {
      if (preg_match('/^[0-9]+$/', $value)) {
        return;
      }
    }

もっと工夫して汎用的に使えるようにするといいでしょう。

OK

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0