18536


textarea に一行一アドレスで特定ドメインのメールアドレスを列挙させた際に、angular.js の ng-pattern
でそれをチェックしたいと思っています。

メールアドレスは

  * xxxx@example.net
  * xxxx@example.or.jp

のいずれかのドメインのもので、これを入力する textarea を以下のように(erb 中に)記載しました。

[code]

    <%= text_area_tag :mails, params[:mails],
          {size: "50x10", style: 'font-size: x-large',
           placeholder: raw('foo_bar_baz@example.or.jp &#13;&#10;fuga_hoge@example.net'),
           'ng-pattern' => '/^([-\w\.]{3,8}@(example\.or\.jp|example\.net)(\n|\r\n)?){2,}$/',
           'ng-model' => 'mails', 'ng-required' => 'true'} %>
    
[/code]

上記の ng-pattern は試行錯誤した結果なのですが、これだと

[code]

    hoge@example.netfuga@example.or.jp
    
[/code]

の様に一行に複数のアドレスが記載されても OK になってしまいます。

正規表現で改行の判定ができていないのがダメだと思うので、どなたかご教示頂けると嬉しいです。

よろしくお願い致します。


CC BY-SA 3.0
2015-11-07T10:51:18.187
18514
2015-11-08T03:29:37.587
2015-11-07T10:57:07.747
13163
13163
question
javascript angularjs 正規表現
textarea に記載された複数メールアドレスを確認するための正規表現

[code]

    'ng-pattern' => '/^([-\w\.]{3,8}@(example\.or\.jp|example\.net)\b(\n|\r\n)?){2,}$/'
    
[/code]

このパターンを使ってみてください。違いは単語境界(`\b`)を一つ加えただけです。

`?`は「0個または1個」の意味なので、`(\n|\r\n)?`だけでは改行があっても無くてもよいことになり、改行なしで連続したアドレスにもマッチしてしまいます。

かといって`(\n|\r\n)`のようにアドレスの後の改行を必須にしてしまうと、angular.jsがtextareaの最後の改行を無視する関係上、正しい入力でもマッチしません。

`\b(\n|\r\n)?`とすると行の終わりもしくは文字列の終わりにマッチするので正しく判定できます。


CC BY-SA 3.0
2015-11-08T03:29:37.587
18536
2015-11-08T03:29:37.587
3639
18514
answer