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

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

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

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Q&A

解決済

2回答

7018閲覧

正規表現でメールアドレスのバリデーションをしたい

mttkd399

総合スコア13

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

0グッド

0クリップ

投稿2018/04/08 12:59

編集2018/04/08 13:27

javascript

1window.Parsley.addValidator('email', { 2 validateString: function (value) { 3 var regExp = /^(?:(?:(?:(?:[a-zA-Z0-9_!#$\%&'*+/=?^`{}~|\-]+)(?:.(?:[a-zA-Z0-9_!#$\%&'*+/=?^`{}~|\-]+))*)|(?:"(?:\[^\r\n]|[^\"])*")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#$\%&'*+/=?^`{}~|\-]+)(?:.(?:[a-zA-Z0-9_!#$\%&'*+/=?^`{}~|\-]+))*)|(?:[(?:\\S|[\x21-\x5a\x5e-\x7e])*])))$/; 4 return regExp.test(value); 5 } 6});

現在Parsleyで上記のようなバリデーションを設定しています。(ひらがなを含まないメールアドレス形式を許容する)

今回やりたいことは、これに少し修正を加えて特定のメールアドレスが入力された場合にエラーを返すようにすることです。
具体的には、'@softbank.ne.jp'、'@yahoo.co.jp'、'@gmail.com'を語尾に含むアドレスが入力された時に、バリデーションに引っ掛けてエラーを出すような実装にしたいです。

この場合どのように設定するのがよろしいでしょうか?ご教示いただけると幸いです。

ちなみに以下のように設定してみたところ、バリデーション自体はうまくかけれたのですが、RSpecfeaturesでいじったところと関係のないエラーがたくさん出てしまい(原因は不明)、他に表現の方法がないか模索しています。

javascript

1window.Parsley.addValidator('email', { 2 validateString: function (value) { 3 var regExp = /^(?:(?:(?:(?:[a-zA-Z0-9_!#$\%&'*+/=?^`{}~|\-]+)(?:.(?:[a-zA-Z0-9_!#$\%&'*+/=?^`{}~|\-]+))*)|(?:"(?:\[^\r\n]|[^\"])*")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#$\%&'*+/=?^`{}~|\-]+)(?:.(?:[a-zA-Z0-9_!#$\%&'*+/=?^`{}~|\-]+))*)|(?:[(?:\\S|[\x21-\x5a\x5e-\x7e])*])))$(?<!softbank.ne.jp|yahoo.co.jp|gmail.com)/; 4 return regExp.test(value); 5 } 6});

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

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

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

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

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

guest

回答2

0

「具体的には…」と「以下のように設定…」の内容があまりにかけ離れているような気がするのですが、「@softbank.ne.jp'、'@yahoo.co.jp'、'@gmail.com'を語尾に含むアドレス」をひっかけたいなら正規表現は以下のようなのでいいでしょう。

@(softbank.ne.jp|yahoo.co.jp|gmail.com)$

メールアドレスにマッチする正規表現については以前も何度か質問が出ているし、いわゆるFAQなので検索してほしいですが、「本気でやるとすると滅茶苦茶複雑」なので「適当なところでお茶を濁す」ことになるのが現実だと思います。

投稿2018/04/08 13:19

KojiDoi

総合スコア13669

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

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

mttkd399

2018/04/08 13:23

すみません、質問の仕方がわかりにくかったですね。 '@softbank.ne.jp'、'@yahoo.co.jp'、'@gmail.com'を語尾に含むアドレスに対してエラーを吐き出したいです。なのでこれらが語尾に来るアドレス以外のアドレスを許容する形にしたいです。 この場合どのように設定したらよろしいでしょうか?
mttkd399

2018/04/08 13:24

あとで質問自体も修正しておきます。
guest

0

ベストアンサー

JavaScript

1window.Parsley.addValidator('email', { 2 validateString: function (value) { 3 var notAccept = /@(?:softbank.ne.jp|yahoo.co.jp|gmail.com)$/; 4 var isMailaddress = /~~/; 5 return !notAccept.test(value) && isMailaddress.test(value); 6 } 7});

投稿2018/04/08 23:10

編集2018/04/09 02:21
otn

総合スコア84423

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

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

mttkd399

2018/04/09 02:18

うまく望み通りのバリデーションをかけることができました!ありがとうございます。
otn

2018/04/09 02:21

コード違ってましたね。修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問