質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

3138閲覧

php メールアドレス 正規表現

coko1

総合スコア276

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/03/17 02:21

編集2017/03/17 13:50

現在javascriptで以下の正規表現を使っているのですが、これと同様の効果を得られる正規表現をPHPでも使いたいと考えています。
どのように記述したら同じような制御を期待できるのでしょうか?

javascript

1mail.match(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/){ 2 alert('NG'); 3}

これを以下のようにしたいです。

if(preg_match(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),$mail){ echo 'NG'; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

丸投げ多すぎです。前に自分のした質問を見返してください。それでもわからないってことはないと思います。

投稿2017/03/17 02:27

toutou

総合スコア2050

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以前の質問「複数行メールアドレスの正規表現」もご覧ください。

その回答にも書きましたが、HTML5では<input>要素にtype="email"タイプが追加され、電子メールアドレスの形式チェックができるようになりました。規格でチェック方法の例として挙げられている正規表現は、ご質問で提示されたものとほぼ同等です。つまり、HTML5を前提にできるのであれば、javaScriptでやっていたことをHTMLだけでできます。

しかし、クライアントサイドでのチェックは回避される可能性があるので、サーバサイドでもチェックはするべきです。その際可能なら、正規表現のような簡易なチェックだけでなく、より厳密なチェックもするべきでしょう。

まず、ドメイン部のチェックをすることが考えられます。DNSに問い合わせることで、ドメイン部が存在するドメインであるかどうか調べます。

  • GitHubのegulias/EmailValidatorでは、メールアドレスが正しい形式になっているかどうか (なお、UTF-8を含む場合にも対応しています) に加え、ドメイン部が存在するドメインであるかどうか (DNSに登録されているか) もチェックできます。使い方はリンク先のページを見て下さい。

  • symfony/Validatorも同様のチェックができます。使い方はドキュメントを見て下さい。

更に、メールアドレスのドメインのメールサーバに接続して、アドレスが実在するかどうかチェックすることが考えられます。これは当然、ドメインの存在チェックを含みます。

  • hbattat/verifyEmailは、このようなチェックを行えます。他にも同様のライブラリはあると思います。

投稿2017/03/17 04:20

編集2017/03/17 10:04
ikedas

総合スコア4227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

javascriptのチェックは入力補助の意味があるので
ある程度必要かもしれませんがPHP側でわざわざチェックする必要ありますか?
むしろドメインが有効かどうかなどをチェックするほうが
意味があると思います(サーバー負荷はあがりますが)

とりあえずご提示のパターンを流用すると、デリミタとの競合がある
スラッシュだけはエスケープしてあげてください

PHP

1$str="a@b.c"; 2$pattern="/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/"; 3if(preg_match($pattern,$str,$m)){; 4 print_r($m); 5}

投稿2017/03/17 02:38

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coko1

2017/03/17 10:30 編集

if(preg_match($pattern,$str)){ echo '不正なメールアドレスです' } のように判別することはできないでしょうか?
guest

0

私が参考にしていたサイトの情報です。

そろそろメールアドレスを正規表現だけでチェックするのは終わりにしませんか?

正規表現のパターンも載っています。
$pattern = '/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*@[?([\d\w.-]+)]?$/';

参考までですが・・・
phpでやるならばさらに踏み込んでチェックできるので、
checkdnsrrを使うことで、存在しないドメインでの登録が回避できます。

投稿2017/03/17 02:38

raichi

総合スコア278

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問