![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- 銀行・ネットバンキング・信用金庫 ゆうちょアプリ。電話番号認証できない。 2 2022/06/10 15:59
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Excel(エクセル) 【エクセル】COUNTIFの検索条件が可変する数字の場合の数式 1 2022/09/27 15:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メッセージボックスで1025文字...
-
全角半角変換 C++/CLI
-
エクセルのCOUNTIFが正しくカウ...
-
全角英数文字が嫌われる理由を...
-
全角英数字のみ半角英数字にす...
-
半角記号、全角記号を含む正規...
-
全角括弧と全角読点の間隔を狭...
-
文字の入力で横バー上段、中断...
-
Excel2002 一桁数字だけ全角に置換
-
Replace関数は文字数の制限ある...
-
入力禁止文字の設定方法につい...
-
VBScriptである文字列に半角文...
-
半角スペースを全角スペースに
-
全て全角文字かチェックしたい
-
VBAのリストボックスでの文字化け
-
質問です。メールについて
-
なぜインターネットでは半角カ...
-
Phonetic関数を利用して文章中...
-
バッチファイル 全角検索
-
Excel関数「COUNTIF」で”文字”...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスで1025文字...
-
文字の入力で横バー上段、中断...
-
Excel関数「COUNTIF」で”文字”...
-
全角括弧と全角読点の間隔を狭...
-
エクセルのCOUNTIFが正しくカウ...
-
半角記号、全角記号を含む正規...
-
記号は半角と全角どちらがよい...
-
XMLのタグ名の禁則文字
-
エクセルでの漢字、カタカナ、...
-
Replace関数は文字数の制限ある...
-
VBAで英数字入力チェックしたい。
-
文字列中の両丸括弧を取り除くV...
-
特定の文字を簡単な操作で半角...
-
全角英数文字が嫌われる理由を...
-
全角半角変換 C++/CLI
-
VBScriptである文字列に半角文...
-
半角文字と全角文字の判別の仕方
-
2つ以上の連続する空白文字を除去
-
Excel2002 一桁数字だけ全角に置換
-
VB.net テキストボックス半角文...
おすすめ情報