0

Hi I am working on Angular8 with Template Driven forms, wherein i want to validate multiple email id, i have 2 email fields one is To and the other is CC. If the email id is present and if it is valid then i am enabling Send Email Button, but when i tried to use multiple email id, the validation fails and i get an eror as Invalid email id. Here if there is one email id also it must validate, if it is multiple email id also it must validate.

HTML:

<div class="row mb-3">
                <div class="col-2">To:</div>
                <div class="col"><input type="email" class="form-control" autocomplete="off" [(ngModel)]="userMail"  pattern="^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$" #userContactemail="ngModel" placeholder="Email" >
                    <div class="md-errors-spacer email-error"
                        [hidden]="userContactemail.valid || userContactemail.untouched">
                        <div *ngIf="userContactemail.errors && userContactemail.errors.pattern" class="error">
                            Invalid Email
                        </div>
                    </div>
                </div>
            </div>
            <div class="row mb-3">
                <div class="col-2">Cc:</div>
                <div class="col"><input type="email" class="form-control" [(ngModel)]="userCC" pattern="^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$" #userContactCC="ngModel" placeholder="Email" >
                    <div class="md-errors-spacer email-error"
                        [hidden]="userContactCC.valid || userContactCC.untouched">
                        <div *ngIf="userContactCC.errors && userContactCC.errors.pattern" class="error">
                            Invalid Email
                        </div>
                    </div>
                </div>
            </div>

DEMO

Bhrungarajni
  • 2,415
  • 11
  • 44
  • 88

1 Answers1

0

i have modified the answer please check now it should work.

    <div id="confirmationModal" class="dialog-container modal">
    <div class="modal-dialog modal-xl modal-dialog-centered" role="document">
        <div class="modal-content">
            <div class="modal-header bg-info">
                <h5 class="modal-title text-white" id="exampleModalLongTitle">Email</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close" >
          <span aria-hidden="true">&times;</span>
        </button>
            </div>
            <div class="modal-body">
                <div class="row mb-3">
                    <div class="col-2">To:</div>
                    <div class="col"><input type="email" class="form-control" autocomplete="off" [(ngModel)]="userMail"  (blur)="onSearchChange('userMail')" #userContactemail="ngModel" placeholder="Email" >
                        <div class="md-errors-spacer email-error"
                            [hidden]="userMailValid || userContactemail.untouched">
                            <div *ngIf="!userMailValid" class="error">
                                Invalid Email
                            </div>
                        </div>
                    </div>
                </div>
                <div class="row mb-3">
                    <div class="col-2">Cc:</div>
                    <div class="col"><input type="email" class="form-control" [(ngModel)]="userCC" (blur)="onSearchChange('userContactCC')" #userContactCC="ngModel" placeholder="Email" >
                        <div class="md-errors-spacer email-error"
                            [hidden]="userCCValid || userContactCC.untouched">
                            <div *ngIf="!userCCValid" class="error">
                                Invalid Email
                            </div>
                        </div>
                    </div>
                </div>
                <div class="row mb-3">
                    <div class="col-2">Subject:</div>
                    <div class="col"><input type="email" class="form-control"  [ngModel]="userSubject"  (ngModelChange)="userSubject=$event" >
          </div>
                    </div>
                    <div class="row">
                        <div class="col">
                            <textarea class="form-control" rows="6"  [ngModel]="userContent"  (ngModelChange)="userContent=$event"></textarea>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-primary" [disabled]="!( userContent && userCCValid && userMailValid)">Send Mail
        </button>

                </div>
            </div>
        </div>
    </div>
import { Component, VERSION } from "@angular/core";

@Component({
  selector: "my-app",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]
})
export class AppComponent {
  name = "Angular " + VERSION.major;

  public subject: any = "";
  public userMail: any = "";
  public userFile: any = "";
  public userSubject: any = "";
  public userContent: any = "";
  public userContactCC: any = null;
  public userCC = "";
  userMailValid = true;
  userCCValid = true;

  onSearchChange(input): void {  
    console.log(this[input]);
    if(input == 'userContactCC') {
      this.validateEmailList(this.userCC,  'userContactCC')
    } else {
      this.validateEmailList(this.userMail, 'userMail')
    }
  }

  validateEmailList(raw, type){
    var emails = raw.split(',')

    var valid = true;
    var regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

    for (var i = 0; i < emails.length; i++) {
        if( emails[i] === "" || !regex.test(emails[i].replace(/\s/g, ""))){
            valid = false;
        }
        console.log("emails,", emails[i], valid)
    }
    if(type == 'userContactCC') {
      this.userCCValid = valid;
    }else {
      this.userMailValid = valid;
    }
    return valid;
} 
}

Harry
  • 45
  • 2
  • 11
  • Thanks for response, but my requirement is different, i want to have email validation for 1 email id or multiple email id with comma seperated – Bhrungarajni Nov 24 '20 at 07:28
  • if i use, test@gmail.com, it shows it is valid but if i use test@gmail.com,email@gmail.com it says invalid email, i need your help to fix that – Bhrungarajni Nov 24 '20 at 07:29
  • then you need to create a function in your controller file and seperate the email list by comma something like this, userMail.replace(/\s/g,'').split(","); and then iterate through the list and check there is also an similar answer over here [link](https://stackoverflow.com/questions/23777183/validate-a-comma-separated-email-list) – Harry Nov 24 '20 at 07:38
  • Thanks, can you please help me out in my demo? – Bhrungarajni Nov 24 '20 at 07:41
  • i used with this pattern='^(\s?[^\s,]+@[^\s,]+\.[^\s,]+\s?,)*(\s?[^\s,]+@[^\s,]+\.[^\s,]+)$' from link you provided, but if i am using 3 email id and if i give just .i for the third email id it still accepts as true – Bhrungarajni Nov 24 '20 at 07:45
  • I have updated the answer, please check it should solve your issue, please mark as resolved – Harry Nov 24 '20 at 08:44
  • if my answer did not help you, then do let me know. – Harry Nov 30 '20 at 13:02