Необходимо проверить минимум 2 или более писем в одном поле в угловых JS - PullRequest
0 голосов
/ 14 сентября 2018

Прямо сейчас у меня это выглядит так:

<input 
  type="text" 
  id="EmailAddresses" 
  required 
  name="EmailAddresses" 
  data-ng-pattern="/.+@.+/" 
  placeholder="yourname@organization.org; name@organization.org">

<div data-ng-message="pattern">
This needs to be a valid email or a semicolon separated list of emails </div>

, который отлично работает, если у меня есть по крайней мере 1 электронное письмо в поле, но я хочу проверить, не содержит ли оно хотя бы 2 электронных письма, разделенных точкой с запятой в одной и той жеполе .. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Взято из Изменение встроенных валидаторов вам нужно отделить строку от ввода и сделать недействительной форму, если одна из подстрок недействительна. Это просто наивный пример для начала:

Plunk

https://plnkr.co/edit/ABQg3zba7f9sPei4?p=preview

JS

var app = angular.module('customEmailValidation',[]);

app.controller('MainCtrl', ['$scope', function($scope){
    $scope.email = '';
    $scope.submitForm = function(){
    }
}]);

app.directive('multimail', function() {
    var EMAIL_REGEXP = /\S+@\S+\.\S+/i;

    return {
        require: '?ngModel',
        link: function(scope, elm, attrs, ctrl) {
            // only apply the validator if ngModel is present and AngularJS has added the email validator
            if (ctrl && ctrl.$validators.email) {

                // this will overwrite the default AngularJS email validator
                ctrl.$validators.email = function(modelValue) {
                    if (ctrl.$isEmpty(modelValue)) {
                        return true;
                    }
                    var mails = [];
                    if (modelValue.indexOf(' ') > 0) {
                        mails = modelValue.split(' ');
                    } else {
                        mails.push(modelValue);
                    }
                    var valid = true;
                    for(var i = 0; i < mails.length; i++) {
                        if (!EMAIL_REGEXP.test(mails[i])) {
                            valid = false;
                        }
                    }
                    return valid;
                };
            }
        }
    };
});

HTML

<body ng-app="customEmailValidation" ng-cloak>
    <div ng-controller="MainCtrl">
        <form name="myForm" ng-submit="submitForm()">   
            <label>Email Address</label>
                <input
                    multimail
                    type="email"
                    id="EmailAddresses"
                    required
                    name="EmailAddresses"
                    ng-model="email"
                    name="email"
                    placeholder="yourname@organization.org name@organization.org">

                <div class="error" ng-show="!!myForm.email.$error">
                    <p ng-show="myForm.email.$error.required">This is a required field</p>
                    <p ng-show="myForm.email.$error.email">Your email address is invalid</p>
                </div> 
                <button type="sumbit">Submit</button>     
        </form>
    </div>
</body>
0 голосов
/ 14 сентября 2018

Вам нужно написать пользовательскую директиву, которая может разделять адреса электронной почты на точки с запятой, повторять каждый и проверять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...