Contact Form 7で「.」の入ったアドレスが弾かれてた原因判明

こないだから延々悩んでた表題の件、公式フォーラムで質問してようやく解決。

検索したら最初に出てきたのが公式フォーラムにあったこの質問。

WordPress › フォーラム »contact form 7 メールアドレスのエラーチェック方法の変更

contact form 7 メールアドレスのエラーチェック方法の変更(カスタマイズ)方法を教えてください。

デフォルトだと、アドレス前方に「.」が入っていたりや、1文字だけだったりすると不正なアドレスと判断されるようです。

これを許可したいのですが、どのようにすればよろしいでしょうか?

で、Contact Form 7のデフォルト仕様なのかと思って、
「.」が排除されないようにする方法を私も公式フォーラムで質問してみたわけです。

WordPress › フォーラム » contact form 7 @以前に.の入ったメールアドレスのチェックについて

そしたら、開発者様からコメント付いてて、Contact Form 7はデフォルトでそんな仕様は持ってない、と。

で、ではなぜ Contact Form 7 では . を含むメールアドレスを排除するかというと、そもそもそのような事実はなく、Contact Form 7 でも . を含むメールアドレスは普通に通ります。もし他のサイトでもお使いでしたら試してみてください。

特定のサイトだけで . を含むメールアドレスがバリデーションエラーになる、ということでしたら、他のプラグインかテーマが処理に干渉している可能性が考えられます。他のすべてのプラグインを無効化してテーマをデフォルトのものに戻して試してみてください。

で、プラグイン一旦全部外してみたところ、
なぜかhttps://~のURLを叩いてもhttp://にリダイレクトされて、
確認画面用ライブラリも外れた状態でフォームが表示されたので、
ものは試しにそっちで「.」付きアドレスでテストしたら普通に通っちゃったという…
 #リダイレクトは多分プラグイン外した時にどっか狂ったんだと思うが

現象を整理すると、
ライブラリが無い状態で「.」付きアドレス使用→問題なし
ライブラリがある状態で「.」付きアドレス使用→エラー

悪さしてたのはお前かあああああああ!

ちなみに、使用してたのはこのライブラリです。
wordpressのcontact form7で確認画面を出す手軽なライブラリ

ライブラリの中のcontact-form7-confirm.js、こいつが独自にアドレスのチェックをやってて、
そのチェックでsafeになる文字列の中に「.」が入っていなかったという…orz

てことで、さっそくコード編集。
といっても、正規表現に「.」を書き加えるだけ(^^;)

元のコード(contact-form7-confirm.jsの20行目以降を表示しています。26行目に注目)

		validates : {
			required : {
				before : '',
				after : 'は必須です。'
			},
			email : {
				match : /^[A-Za-z0-9]+[\w-]+@[\w\.-]+\.\w{2,}$/,
				before : '',
				after : 'を確認してください。'
			}
		}

直したコード(26行目の「+[\w-]」に「\.」を追加しています)

		validates : {
			required : {
				before : '',
				after : 'は必須です。'
			},
			email : {
				match : /^[A-Za-z0-9]+[\w\.-]+@[\w\.-]+\.\w{2,}$/,
				before : '',
				after : 'を確認してください。'
			}
		}

これでさっくりと「.」付きのメールアドレスが通過するようになりましたとさ。

…散々悩んだあの時間を返せ~~~~~~~っ!

それにしても、やっぱり公式フォーラムには質問してみるもんだのぅ。。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です