Catenated Email Регулярное выражение

0

Я использую js/jquery для проверки допустимого формата строки, которая может содержать от одного до пяти адресов электронной почты, разделенных запятыми. У меня есть только один случай, который проходит, который не должен проходить при использовании следующих методов:

    function isValidEmails(concatenatedEmails)
    {
        var compressedEmails = concatenatedEmails.replace(/ /g,'');
        var emails = compressedEmails.split(',');
        var isValid = true;
        if(emails.length > 0 && emails.length <= 5)
        {
            $.each(emails, function(index, email)
            {
                if(!isValidEmailFormat(email))
                {
                    isValid = false;
                }
            });
        }
        else
        {
            isValid = false;
        }
        return isValid;
    }

    function isValidEmailFormat(email)
    {
        return email.match("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
                    + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
    }

Эти методы захватывают все, кроме строки, которая передается следующим образом:

"[email protected], [email protected], [email protected], asdf"

Это поймает все остальное, но каким-то образом эта строка проведет проверку. Может ли кто-то пролить свет на то, как я могу сделать это более эффективным? Спасибо за любую помощь.

Теги:

1 ответ

1
Лучший ответ

Ваш код на самом деле сработал для меня. , , он вернул false, когда значение "asdf" было там и true когда я удалил это значение из списка. Вы пробовали записывать значения в консоль, чтобы увидеть, где для вас могут быть проблемы?


Что касается эффективности кода, по большей части ваш код выглядит хорошо. Есть только несколько вещей, которые я мог видеть, что вы могли бы сделать, чтобы немного обрезать его:

  1. В разделе each() где вы проверяете правильность адреса электронной почты, если вы return значение, когда оно ложно, оно перестанет обрабатывать остальные электронные письма (в конце концов, нет смысла продолжать их проверять, после одного плохого). Это небольшое изменение:

    if(!isValidEmailFormat(email)) {
        return (isValid = false);
    }
    

    Это остановит цикл при первом обращении к недопустимому значению email и перейдет к return всей функции.

  2. Вы также можете сделать свое регулярное выражение немного менее сложным, используя и фактическое значение RegExp вместо строки) и добавление флага i, чтобы сделать регистр шаблона нечувствительным.

    function isValidEmailFormat(email) {
        return email.match(/^[a-z0-9+_-]+(\.[a-z0-9_-]+)*@[a-z0-9-]+(\.[a-z0-9]+)*(\.[a-z]{2,})$/i);
    }
    

    Это позволяет удалить все экземпляры AZ и удалить необходимость использования двойных слэшей (\\). Кроме того, + не нужно экранировать внутри группы символов, поэтому я удалил это.

Помимо этих двух вещей, ваш код выглядит неплохо.

  • 0
    Я ценю ваш вклад. Спасибо за примеры, чтобы сделать код более эффективным.
  • 0
    Нет проблем . , , рад помочь. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню