jQuery validate - регулярное выражение электронной почты CSV без запятой - PullRequest
0 голосов
/ 20 января 2020

Код, над которым я работаю для пользовательской проверки в .validate, приведен ниже. Я хочу разрешить пользователю вводить адреса электронной почты, разделенные запятой, но я застрял в своем регулярном выражении при запрете запятой в конце.

aaa@foo.com, bbb@bar.com = ok

aaa@foo.com,bbb@bar.com = ok

aaa@foo.com, = НЕ в порядке (обратите внимание, что здесь также есть пробел)

aaa@foo.com, = НЕ в порядке

Но моя проблема в приведенном ниже все в порядке.

$.validator.addMethod('csvEmail', function (value, element) {
    return this.optional(element) || /^((([^<>()\[\]\\.,;:\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,}))+(,|, |$))*$/.test(value);
}, "Please enter a valid email address or multiple valid addresses separated by a comma.");

1 Ответ

0 голосов
/ 20 января 2020

Проблема с вашим выражением regex заключается в том, что вы соответствуете первому столбцу aaa@foo.com вместе с , или ,(space) или (end of the line). Затем вы проверяете, повторяется ли оно 0 или более раз, используя *.

Однако здесь вы не можете использовать знак * или +. Вы хотите, чтобы он совпадал с 2 раз всегда . Таким образом, вы хотите исправить ваш 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,}))+(,|, |$)){2}$

Если вы не заметили, я удалил * перед $ в конце и заменил это с {2}. Это потому, что вы хотите 2 совпадения.


Тем не менее, я бы go со следующим regex выражением:

(.+?)@(.+)\.(.+),[^\S\r\n]*(.+?)@(.+)\.(.+)

В любом случае, оба верните результаты, которые вы хотите, из следующего:

aaa@foo.com, bbb@bar.com
aaa@foo.com,bbb@bar.com
aaa@foo.com, 
aaa@foo.com,

Они выделяют только следующее:

aaa@foo.com, bbb@bar.com
aaa@foo.com,bbb@bar.com

В случае, если вы захотите попробовать sh самостоятельно , нажмите здесь и измените regex между ними. Они оба работают.

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