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

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

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

366閲覧

正規表現にて分からない部分があります。

aae_11

総合スコア178

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2019/07/04 18:38

こちらQiitaの記事を拝見させて貰っていた際に、正規表現の部分でつまずいてしまいました。以下は、該当のコードになります。

function is_valid_email($email, $check_dns = false) { switch (true) { case false === filter_var($email, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE): case !preg_match('/@([^@[]++)\z/', $email, $m): return false; case !$check_dns: case checkdnsrr($m[1], 'MX'): case checkdnsrr($m[1], 'A'): case checkdnsrr($m[1], 'AAAA'): return true; default: return false; } }

!preg_match('/@([^@[]++)\z/', $email, $m)こちらの部分ですが、両端のバックスラッシュは始点、終点を表すデリミタであると理解しています。その次のかっこ内「^」は以降の文字列以外を表しているのだと思うのですが、@以降の意味がいまいち分かりません。
お手数ではありますが、どなたかご説明頂けませんでしょうか。
よろしくお願いします

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

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

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

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

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

guest

回答1

0

ベストアンサー

[^~~~]で、「~~~に含まれない1文字」で、「~~~」というのが今回は@[

@ の次が、@[以外の文字の1文字以上の連なり、そして末尾

投稿2019/07/04 22:19

otn

総合スコア84505

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

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

otn

2019/07/05 00:23

あと、++ は普通は + と書きます。 「A+」は「Aの1回以上の繰り返し」 「A++」は「「Aの1回以上の繰り返し」の1回以上の繰り返し」 ですが、意味するところは同じ。
otn

2019/07/05 00:51

あ、意味があったんですね。書き誤りかと思いました。 失礼しました。
aae_11

2019/07/05 01:29

ご回答ありがとうございます。 となりますと、@の次に、@か[が含まれない場合は、パターンにマッチするとの解釈で合っていますでしょうか...?
otn

2019/07/05 02:04

そうですね。@ から 文字列末までの間に、@ も [ も含まれない場合にマッチです。
aae_11

2019/07/05 03:57

どうもです! 重ね重ねすみません。 バリデーション的には、「case false === filter_var($email, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE):」こちらで弾けないものを正規表現で弾いている感じなんですかね...?
otn

2019/07/05 04:18

foo@[192.168.0.100] のようなのも、有効な電子メールアドレスなので、それを除きたいということではないかと。
aae_11

2019/07/05 05:15

そういうことでしたか! 何度もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問