Подтвердить что ты не робот

Как сопоставить список писем с запятыми с регулярным выражением?

Попытка проверить список рассылки с разделителями-запятыми в текстовом поле с asp:RegularExpressionValidator, см. ниже:

<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
                    runat="server" ErrorMessage="Wrong email format (separate multiple email by comma [,])" ControlToValidate="txtEscalationEmail"
                    Display="Dynamic" ValidationExpression="([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},?)" ValidationGroup="vgEscalation"></asp:RegularExpressionValidator>

Он отлично работает, когда я тестирую его на http://regexhero.net/tester/, но он не работает на моей странице.

Здесь мой пример ввода:

[email protected],[email protected]

Я пробовал предложение в этом сообщении, но не смог заставить его работать.

p.s. Я не хочу обсуждать правильную проверку электронной почты

4b9b3361

Ответ 1

Попробуйте следующее:

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},?)+$

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

Добавление ^ и $ означает, что что-либо между началом строки и началом совпадения (или концом совпадения и окончанием строки) приводит к сбою проверки.

Ответ 2

Это регулярное выражение позволяет отправлять электронные письма с пробелами после запятых.

^[\W]*([\w+\-.%][email protected][\w\-.]+\.[A-Za-z]{2,4}[\W]*,{1}[\W]*)*([\w+\-.%][email protected][\w\-.]+\.[A-Za-z]{2,4})[\W]*$

Играя с этим, коллега придумал этот RegEx, который более точным. Вышеприведенный ответ пропускает список адресов электронной почты, где первый элемент не является адресом электронной почты. Здесь обновление, которое также позволяет пробелы после запятых.

Ответ 3

Первый ответ, выбранный как наилучший, соответствует строке типа [email protected]@abc.com которая недопустима.

Следующее регулярное выражение будет работать для почтовых идентификаторов через запятую.

^([\w+-.%][email protected][\w.-]+\.[A-Za-z]{2,4})(,[\w+-.%][email protected][\w.-]+\.[A-Za-z]{2,4})*$

Он будет соответствовать одному emailId, указанному через запятую, но не в случае пропуска запятой.

Первая группа будет соответствовать строке одного emailId. Вторая группа необязательно требуется токеном "*", т.е. Либо 0, либо более номер такой группы, но "," должен быть в начале такого emailId, что делает разделенный запятыми emailId в соответствии с приведенным выше регулярным выражением.

Ответ 4

^([a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+,*[\W]*)+$

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

Ответ 5

Регулярное выражение ниже является менее ограничительным и более подходящим для проверки введенного вручную списка разделенных запятыми адресов электронной почты. Он допускает смежные запятые.

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},*[\W]*)+$

Ответ 6

Используйте следующее регулярное выражение, оно решит вашу проблему. Следующее регулярное выражение будет размещать сообщения и предварительные пробелы с запятой.

/^((([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z\s?]{2,5}){1,25})(\s?,\s*?))$/

Ответ 7

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

Мое предлагаемое регулярное выражение:

^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}(,[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,})*$

Это похоже на принятый ответ, но решает проблему, о которой я говорил. Решение, которое я придумал, вместо того, чтобы искать "адрес электронной почты, за которым следует дополнительная запятая" один или несколько раз, что и является принятым ответом, это регулярное выражение ищет "адрес электронной почты, за которым следует дополнительный запятый префиксный адрес электронной почты любое количество раз".

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

Примечания: Это регулярное выражение предназначено для использования с флагом нечувствительный.
Вы можете использовать любое регулярное выражение, чтобы соответствовать адресу электронной почты, который вам нравится, я просто использовал тот, который я уже использовал. Вы просто замените каждый [A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,} на любое регулярное выражение, которое хотите использовать.

Ответ 8

Решение, которое работает для меня, заключается в следующем

^([a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)(,([a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+))*

Ответ 9

Следующий RegEx будет работать даже с некоторыми из самых странных электронных писем, и он поддерживает запятую между электронными письмами.

((?:[a-zA-Z0-9!#$%&'*+/=?^_'{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_'{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]),?)+

Несколько примеров:

Valid: [email protected]
Valid: [email protected]
Valid: [email protected],[email protected]
Valid: [email protected],/#!$%&'*+-/=?^_'{}|[email protected],"!#$%&'-/=^_'{}|~.a"@solar.org
Invalid: planet [email protected]

Надеюсь это поможет.

Ответ 10

Самое простое решение будет следующим. Это будет соответствовать строке с разделенным запятыми списком. Используйте следующее регулярное выражение в вашем коде.

Regex: '[^,] +,?'

Ответ 11

Простая модификация ответа @Donut позволяет использовать соседние запятые, все TLD из двух и более символов и произвольный пробел между адресами электронной почты и запятыми.

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,}(\s*,?\s*)*)+$

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

Примеры соответствующих списков:

Ответ 12

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]+)(, ?[\w+-.%][email protected][\w-.]+\.[A-Za-z]+)*$

Правильно работает с 0 или 1 пробелом после каждой запятой, а также для длинных расширений домена