• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現について)

正規表現についての質問

このQ&Aのポイント
  • JavaScriptを使ったメールアドレスの入力チェックについて質問です。
  • ドメインのチェックを追加したいと思っていますが、うまく動作しません。
  • 現在、携帯のアドレスに限定してチェックを行おうとしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

正規表現は苦手ですが… 1)元のソースでのチェックを通っても、後のドメインチェックにかかればエラーにするのですから、最初のチェックはあまり意味がないことになりませんか? 2)No1様がご指摘のように、not(A or B) の意味にしたいのでしょうから、ご提示のような書き方にするなら not(A) and not(B) にしないと全てのものがひっかかってしまいます。 てなわけで、チェック内容がそのままでよいとすれば  /^[\x01-\x7F]+@(docomo|ezweb|softbank)\.ne\.jp$/  /^[\x01-\x7F]+@i\.softbank)\.jp$/ のどちらにも該当しないものをチェックすればよくなると思われます。 そこで結局は、  /^[\x01-\x7F]+@((docomo|ezweb|softbank)\.ne|i\.softbank)\.jp$/ に該当しないということでよさそうな気がしますが。 <おまけ> メールアドレスの正規表現については、検索すればいろいろ見つかるはずですので是非お試しを。 まともに規格通りのものをチェックすると(↓)みたいになるそうです。 http://www.din.or.jp/~ohzaki/mail_regex.htm (←perlの正規表現) でも、これだと実際にチェックしたいもの以外も通ってしまうので、通常はもっと簡略化したものが使われていることが多いことでしょう。あるいは(↑)のサイトに紹介されているような、サーバサイドで確認をする方法を用いるとか… 質問者様がご提示のチェックの出典は以下ではなかろうかと… http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/

katu0dasi
質問者

お礼

回答ありがとうございます。 >元のソースでのチェックを通っても、後のドメインチェックにかかればエラーにするのですから、最初のチェックはあまり意味がないことになりませんか? 僕も思っていたのですが、元の意味をあまり分かっていない状態でいじくるのは気が引けたので今回の様な表記にしていました。 >そこで結局は、 > /^[\x01-\x7F]+@((docomo|ezweb|softbank)\.ne|i\.softbank)\.jp$/ >に該当しないということでよさそうな気がしますが。 ここまでコンパクトにできる物なんですね・・・ ってコンパクトに表現する為の正規表現か^^; >おまけ こ、これは・・・メールアドレスの奥深さを痛感しました笑 わざわざ出典まで調べていただきありがとうございます。 丁寧で詳しい解説ありがとうございました。

その他の回答 (1)

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.1

|| は または という意味なので、ご提示のものだと メールアドレス判定が正常ではない  または docomo.ne.jp,ezweb.ne.jp,softbak.ne.jpのいずれかではない または i.softbank.jpではない 場合にエラーです。 つまり、どれかがfalseだとエラーがでます。 この場合、ANDの意味を持つ && でつなぐべきですね。 &&でつなげば メールアドレス判定が正常ではなくて、 docomo.ne.jp,ezweb.ne.jp,softbak.ne.jpのいずれかではなくて i.softbank.jpではない 場合にエラーとなります。

katu0dasi
質問者

お礼

素早い回答ありがとうございます。 なるほど、正規表現と言うよりは、論理式の考え方の間違いでしたね。 試してみた所、正常に動作する様になりました。 丁寧な解説ありがとうございました。