※ ChatGPTを利用し、要約された質問です(原文:正規表現について)
正規表現についての質問
このQ&Aのポイント
JavaScriptを使ったメールアドレスの入力チェックについて質問です。
ドメインのチェックを追加したいと思っていますが、うまく動作しません。
現在、携帯のアドレスに限定してチェックを行おうとしています。
正規表現について質問が有ります。
プログラミング初心者なので、根本的な間違い等も犯している可能性もありますがご了承下さい。
今、javascriptを使ってフォームに入力されたメールアドレスの入力チェックを行おうとしています。
とりあえずはwebを漁って見つけたソースでチェックできる様にはなったのですが、もうちょっと拡張したいと思った所、つまずいてしまいました。
元のソースは
if (!this.value.match(/^[\x01-\x7F]+@((([-a-z0-9]+\.)*[a-z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))$/){
alert("error");
}
という風にチェックをしており、
******(@マークが無い)
***@(@の後半が無い)
@***(@の前半が無い)
などの基本的な形式に対してはチェックを行う様になっています。
しかし、hoge@hogeの様に書くと、適当に書いたドメインでもスルーしてしまいます。
そこで、ドメインのチェックも行おうとしているのですが、ここで詰まっています。
ちなみに今回は携帯のアドレスに限定してチェックを行おうと思っています。
javascriptでの正規表現について書いてあるページを見ながら下の様に書いたのですが上手く動作してくれません。
正規表現の書き方がおかしいのだろうとは思うのですが、どこがいけないのかよく分かりません。
if (!this.value.match(/^[\x01-\x7F]+@((([-a-z0-9]+\.)*[a-z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))$/) ||
/*ここから下を追加*/
(!this.value.match(/@(docomo|ezweb|softbank)\.ne\.jp$/) || !this.value.match(/@i\.softbank\.jp$/)){
alert("error");
}
最初はもとからある基本的な入力形式のチェックを行い、また@後のドメインが携帯のドメインでない場合にエラーを返す。というつもりで書きました。
ですが、***@docomo.ne.jpとしてもエラーが返って来てしまいます。
原因を教えていただけますか?
また、もとからあった正規表現が何をどういう指定しているのかもキチンとは理解していないので、教えていただけるとうれしいです。
よろしくお願いします。
お礼
回答ありがとうございます。 >元のソースでのチェックを通っても、後のドメインチェックにかかればエラーにするのですから、最初のチェックはあまり意味がないことになりませんか? 僕も思っていたのですが、元の意味をあまり分かっていない状態でいじくるのは気が引けたので今回の様な表記にしていました。 >そこで結局は、 > /^[\x01-\x7F]+@((docomo|ezweb|softbank)\.ne|i\.softbank)\.jp$/ >に該当しないということでよさそうな気がしますが。 ここまでコンパクトにできる物なんですね・・・ ってコンパクトに表現する為の正規表現か^^; >おまけ こ、これは・・・メールアドレスの奥深さを痛感しました笑 わざわざ出典まで調べていただきありがとうございます。 丁寧で詳しい解説ありがとうございました。