dポイントプレゼントキャンペーン実施中!

phpにてメールフォームを使用してます、
最近スパムメールが増えて来たので対処方法を考えました。

お問い合わせの電話番号が現在半角のみ対応してますが、
これを全角の数字のみ通る様にしたいと思います。

現在使用しているのは下記の通りです、

if (!$phone){error("電話番号を入力して下さい");}
if ($phone){
if (!preg_match("/^\d{2,5}-?\d{1,4}-?\d{3,4}$/",$phone)) {error("電話番号の入力が不正です"); }
}

この何処を修正すれば良いのでしょうか?
自分なりに調べましたがお手上げでGive Up状態です。
ご存知の方が居られましたらお知恵をご教授頂ければ助かります。

A 回答 (3件)

そもそもスパムを全角英数字で防ごうという発想が誤っています。

この方法ではいたちごっこになってしまいます。

今から対策として導入するなら「reCAPTCHA」がおすすめです。歪んだ文字を入力する「CAPTCHA」の後継で、面倒な入力が不要になっています。

http://japan.cnet.com/news/service/35057402/
http://qiita.com/koliainwiki/items/544fe01d8c964 …
    • good
    • 0
この回答へのお礼

こんにちは、To_aru_User 様

連絡が遅く成り申し訳ありません。

早速、「reCAPTCHA」並びに「CAPTCHA」の方を
勉強したいと思います。

分からない事が有りましたら、
Helpして頂ければ幸いです。

今回はGoodなアドバイスをご教授頂き有難う御座います。

お礼日時:2015/01/05 10:11

訂正



\A[0-9]{2,5}―?[0-9]{1,4}―?[0-9]{3,4}\z/u

/\A[0-9]{2,5}―?[0-9]{1,4}―?[0-9]{3,4}\z/u
    • good
    • 0
この回答へのお礼

始めまして、To_aru_User 様

早速の回答を頂き有難う御座います、
大変分かり易いご説明で助かります。

ご指摘の通り電話番号を半角にすれば良いのですが、
スパムメールからの回避です。

当初、問い合せをする名前の箇所にスパムメール業者が半角英数字を使って来た為に、
全角のみ通る様に修正しました。
if (preg_match("/^[a-zA-Z0-9]+$/", $namae)) {error("名前を全角で入力下さい");}

しかし彼らは半角のスペースを用いて通り抜けて来ました、
全角の漢字のみを考えましたが、
FirefoxやThunderbird系には通用しないとWebで有りましたので、
今回の方法を考えた次第です。

To_aru_User 様に不躾な質問で申し訳ありませんが、
下記の文で半角の記号等(スペースや?)を通らない様にする為には、
どの様に修正すれば宜しいでしょうか?

if (preg_match("/^[a-zA-Z0-9]+$/", $namae)) {error("名前を全角で入力下さい");}

度重なるお願いで申し訳ありませんがお助け頂ければ幸いです。

お礼日時:2015/01/04 20:16

全角数字と「―」を許容するコードは以下のものです。



if (!preg_match('\A[0-9]{2,5}―?[0-9]{1,4}―?[0-9]{3,4}\z/u', $phone)) {
error("電話番号の入力が不正です");
}

ただ…全角英数字の入力を強要されると不満を抱くユーザが多いと思われます。実際に私もそうですし、周囲にもそういった人は数多く見受けられます。こういう場合は半角から全角への変換を行うべきでしょう。

$phone = str_replace(array('-', 'ー'), '―', mb_convert_kana($phone, 'R', 'UTF-8'));

ただ、電話番号を全角でデータベースに格納しなければならない理由ってなんでしょうか?住所ならまだしも、電話番号は半角の方が一般的だと思いますが…


[備考]

正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう
http://blog.tokumaru.org/2014/03/z.html

ハイフンなしの電話番号からハイフン付き電話番号を復元する
(関数を少々いじればソースはほとんどそのままでバリデーションに使えます)
http://qiita.com/mpyw/items/431c0c8cb70084a74be5
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!