2010-12-10 4 views
11

Попытка проверить запятыми список эл в текстовом поле с 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] 

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

p.s. Я не хочу, обсуждения вопроса о надлежащем электронной проверке

+0

Не могли бы вы показать код, который добавляет регулярное выражение к валидатору? –

+0

Regex Hero возвращает два совпадения с вашим исходным регулярным выражением. Решение Donut дает только одно совпадение (как и должно). Я полагаю, это означает, что RegularExpressionValidator имеет некоторое уникальное совпадающее поведение с точки зрения того, что оправдывает соответствие. Возможно, два бок-о-боковых матча не оправдывают матч. Это не должно быть трудно понять. –

ответ

14

Попробуйте это:

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

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

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

+0

легкие деньги, спасибо! –

+0

btw, вы знаете, почему он работает без «+» в онлайн-валидаторе? –

+0

@roman m Нет проблем, хотя я не уверен, почему существует разница между онлайн-валидатором и вашим исходным кодом. Рад, что это помогло. – Donut

16

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

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

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

+0

Это регулярное выражение принимает символ "." или пробел и любой специальный символ в конце. Например: «[email protected]». –

+1

Это не позволит 'matt @ about.museum'. –

+5

Чтобы разрешить длинные расширения домена, используйте '^ [\ W] * ([\ w + \ -.%] + @ [\ W \ -.] + \. [A-Za-z] + [\ W] * , {1} [\ W] *) * ([\ w + \ -.%] + @ [\ W \ -.] + \. [A-Za-z] +) [\ W] * $ 'где I просто замените ограничение {2,4} на + –

0

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

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

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

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

Это будет соответствовать, например, '-.-.-.-... @ .......,' Я не уверен, что это действительный адрес электронной почты – Toto

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

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

+0

Требуется; между письмами. Мне нужно это, чтобы взять только, а не; – Na30m

+0

Как я могу это изменить? – Na30m

0

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

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

^[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,} на любое другое выражение, которое вы хотите использовать.

0

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

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

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

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

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

Смежные вопросы