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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのCOUNTIFが正しくカウ...
-
メッセージボックスで1025文字...
-
文字の入力で横バー上段、中断...
-
全角括弧と全角読点の間隔を狭...
-
Excel関数「COUNTIF」で”文字”...
-
文字列中の両丸括弧を取り除くV...
-
XMLのタグ名の禁則文字
-
なぜインターネットでは半角カ...
-
VB.net テキストボックス半角文...
-
Accessの文字数を調べたい
-
HTML5の「pattern」属性で前後...
-
ASP.net(C#) CheckBoxListで...
-
Visual C#でデータベースにある...
-
ColdFusionにて
-
rawurlencodeとurlencodeの違い...
-
エクセルでデータを30バイト...
-
VBのソース検索で、コメントア...
-
PHPの空白除去
-
eval 半角カナが文字化けする
-
Phonetic関数を利用して文章中...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
全角括弧と全角読点の間隔を狭...
-
エクセルのCOUNTIFが正しくカウ...
-
Excel関数「COUNTIF」で”文字”...
-
エクセルでの漢字、カタカナ、...
-
記号は半角と全角どちらがよい...
-
半角記号、全角記号を含む正規...
-
なぜインターネットでは半角カ...
-
VBScriptである文字列に半角文...
-
パソコンで全角、半角文字の切...
-
文字列中の両丸括弧を取り除くV...
-
VBAで英数字入力チェックしたい。
-
全角英数文字が嫌われる理由を...
-
エスケープ文字にstr_replaceが...
-
XMLのタグ名の禁則文字
-
全角英数字のみ半角英数字にす...
-
eval 半角カナが文字化けする
-
Replace関数は文字数の制限ある...
-
半角英数字のみを受け付ける入...
おすすめ情報