🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

5回答

1332閲覧

PHPにて、メールアドレスの正規表現に一致しない文字を抽出する方法を教えて下さい

yutori1222

総合スコア5

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2021/03/08 10:43

前提・実現したいこと

PHP(CakePHP)でフォームを作成しています。

メールアドレスの入力フィールドにて、下記のようなバリデーションを実装したいのですが、
正規表現がうまくいきません。

・メールアドレスに使用不可な文字を入力した場合、認められない文字を明確に指摘する。

 例: 「*はEメールに利用できません。取り除いてください。」

・ @がない場合指摘する。

例:「@が必要です。」

正規表現を用いたバリデーションの実装をしたことがないので、なかなか悩んでいます。
恐縮ですが下記の方法をご教授いただけますでしょうか?

・メールアドレスの正規表現に一致しない文字を抽出する方法(配列形式が望ましい)

例) sam■ple@ex?ample.com を入力した場合、 ['■', '?'] を返す

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

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

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

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

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

guest

回答5

0

一般にEメールの検証は

PHP

1$mail=filter_var($mail,FILTER_VALIDATE_EMAIL);

それ以上の検証は無意味です。
(失敗したら「不正なEmailアドレスです」と書くだけ)

一定の文字以外にヒットする場合は想定があるなら
preg_matchでヒットさせてください

投稿2021/03/08 12:14

yambejp

総合スコア116694

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

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

yambejp

2021/03/08 12:21

たとえば「a@b.c」は有効ですが 「a@b..c」や「a@b.c.」は無効 「a@1.c」はOKで、「a@b.2」は無効 など使ってはいけない文字以前にいろいろ条件が必要です
guest

0

ベストアンサー

正規表現がよく分からないなら、下記が簡単かと思います。文字列処理関数だけで出来ます。

入力された文字列1文字ずつについて繰り返す if(NOT その文字が「使える文字」に含まれる) 使えない文字として処理

投稿2021/03/08 12:12

otn

総合スコア85893

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

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

yutori1222

2021/03/08 12:17

理解するまではその方法なら手っ取り早そうですね・・・ とりあえず仮に実装して、じっくり考えます!ありがとうございました。
guest

0

直接の回答になってないです。

自分の技量を越える機能要求を、自分で理解していない正規表現に求めてしまうと、
その後問題が生じたり機能要求が変更されたときの保守ができずに詰みます。

マストなのかベターなのかわからないため、ベターだとして、
まずはメールアドレスとしてふさわしいかどうかを判定するだけの正規表現で
組み込んでしまうという手は使えないでしょうか。

メールアドレスの正規表現の検索例

検索して見つかる記事、あまり良くない記事があります。
間違ったメールバリデーションが多いので正解を探してみた|りふ|note

ちなみに、メールアドレスのネタでいうと、
docomoがRFC非準拠なメールアドレスを許していたことが問題になっていたりして、
RFC準拠メールアドレスのみ許可する正規表現かどうかも
よく説明を読んで判別しないといけないです。

投稿2021/03/08 11:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yutori1222

2021/03/08 11:40

すいません、文の書き方が悪かったかもしれないです。 メールアドレスの正規表現については調べるとして、 この質問では「正規表現に当てはまらない文字の抽出方法」についてが一番知りたいこととなります。
退会済みユーザー

退会済みユーザー

2021/03/09 00:52

質問者さんがやりたいことはわからなくはないけど、 今どきそこまで丁寧な入力ミスの指摘をする仕組みって、どこかで体験してますか? 本当に使えるメールアドレスかどうかは、空メール送信など実際にメール送信して到達しないと保証できないわけで、 入力ミスの検出にここまで手間ひまをかけるくらいなら作りたいシステムの中身を充実させたいと思っちゃいますけどね。 本気のメールアドレス入力なら、空メール受信から始まるワンタイム入力フォームじゃないかな。 入力だけ正しくても意味がないです。
guest

0

・メールアドレスの正規表現に一致しない文字を抽出する方法

正規表現に一致しなかった文字を抽出することはできません。

疑似的に許可する文字を空文字に置き換えて、残った文字(許可されていない文字)を抽出することはできます。
(ただし、文字単位でのチェックしかできません。文字列の組み合わせを考慮した抽出は無理です。

php

1$notMatchedChars = preg_replace('/[許可する文字]/', '', $input);

投稿2021/03/11 13:00

nojimage

総合スコア959

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

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

0

投稿2021/03/08 11:39

編集2021/03/08 11:39
phper.k

総合スコア3923

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問