
phpにてメールフォームを使用してます、
最近スパムメールが増えて来たので対処方法を考えました。
お問い合わせの電話番号が現在半角のみ対応してますが、
これを全角の数字のみ通る様にしたいと思います。
現在使用しているのは下記の通りです、
if (!$phone){error("電話番号を入力して下さい");}
if ($phone){
if (!preg_match("/^\d{2,5}-?\d{1,4}-?\d{3,4}$/",$phone)) {error("電話番号の入力が不正です"); }
}
この何処を修正すれば良いのでしょうか?
自分なりに調べましたがお手上げでGive Up状態です。
ご存知の方が居られましたらお知恵をご教授頂ければ助かります。
No.3ベストアンサー
- 回答日時:
そもそもスパムを全角英数字で防ごうという発想が誤っています。
この方法ではいたちごっこになってしまいます。今から対策として導入するなら「reCAPTCHA」がおすすめです。歪んだ文字を入力する「CAPTCHA」の後継で、面倒な入力が不要になっています。
http://japan.cnet.com/news/service/35057402/
http://qiita.com/koliainwiki/items/544fe01d8c964 …
こんにちは、To_aru_User 様
連絡が遅く成り申し訳ありません。
早速、「reCAPTCHA」並びに「CAPTCHA」の方を
勉強したいと思います。
分からない事が有りましたら、
Helpして頂ければ幸いです。
今回はGoodなアドバイスをご教授頂き有難う御座います。
No.2
- 回答日時:
訂正
\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
始めまして、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("名前を全角で入力下さい");}
度重なるお願いで申し訳ありませんがお助け頂ければ幸いです。
No.1
- 回答日時:
全角数字と「―」を許容するコードは以下のものです。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PPT ファイルの文字カウント=...
-
エクセルのCOUNTIFが正しくカウ...
-
Excel関数「COUNTIF」で”文字”...
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
VBAで英数字入力チェックしたい。
-
preg_matchで全角数字のみ許可...
-
バッチファイル 全角検索
-
全て全角文字かチェックしたい
-
ExcelのVBAでカタカナをチェッ...
-
全角半角変換 C++/CLI
-
Phonetic関数を利用して文章中...
-
VBScriptである文字列に半角文...
-
全角、半角文字の判別について
-
パソコンで全角、半角文字の切...
-
なぜインターネットでは半角カ...
-
全角括弧と全角読点の間隔を狭...
-
半角スペースを全角スペースに
-
PHP 全角・半角・英数字 エラ...
-
エクセルでの漢字、カタカナ、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
Excel関数「COUNTIF」で”文字”...
-
エクセルのCOUNTIFが正しくカウ...
-
全角括弧と全角読点の間隔を狭...
-
特定の文字を簡単な操作で半角...
-
エクセルでの漢字、カタカナ、...
-
VBAで英数字入力チェックしたい。
-
XMLのタグ名の禁則文字
-
Phonetic関数を利用して文章中...
-
全角英数文字が嫌われる理由を...
-
半角記号、全角記号を含む正規...
-
半角スペース の文字化け...
-
Replace関数は文字数の制限ある...
-
パソコンで全角、半角文字の切...
-
記号は半角と全角どちらがよい...
-
2つ以上の連続する空白文字を除去
-
文字列中の両丸括弧を取り除くV...
-
バッチファイル 全角検索
-
半角英数文字を全角英数文字に...
おすすめ情報