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"というフォームタグがあるとする。
2.telのバリデーションは「半角数字」を指定したとする。
原因
半角数字を判定する箇所は
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