2009-02-21 6 views
9

Мы используем следующее сделать проверку электронной почты в ASP.NET:Regex Email - игнорировать начальные и конечные пробелы?

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

Как это может быть изменен, чтобы игнорировать начальные и конечные пробелы?

Фактическая обрезка мы обрабатываем в коде при обратной передаче, но валидатор запускается как недействительный, если пользователь имеет дополнительное пространство часто из-за копирования и вставки.

+0

Вы должны прочитать следующее: http://mail.python.org/pipermail/python-list/2006-September/404146.html – Gumbo

+0

Отправка тестового сообщения не является вариантом. Он должен быть проверен как можно лучше на форме до подачи. – schooner

ответ

4

Просто сделайте обрезку, прежде чем передавать ее валидатору.

+0

Это валидатор asp.net, связанный с текстовым полем, поэтому не уверен, что это возможно по умолчанию. Я бы предпочел, чтобы регулярное выражение обрабатывало его, если это возможно. – schooner

+1

Почему? Пробелы - это * не * часть действительного адреса электронной почты, поэтому регулярное выражение не должно их видеть. Обрежьте значение с помощью операции onchange/onsubmit. –

+0

Я предпочитаю это больше, чем делать это в регулярном выражении. "[email protected]" не является действительным адресом электронной почты. Дополнительные пространства больше связаны с источником данных. Например, вы не будете проверять электронную почту в БД с тем же электронным регулярным выражением, которое принимает пробелы. Если вы получите письмо из строки запроса, вы не будете использовать регулярное выражение, которое позволяет закодировать материал, вы сначала его расшифруете, а затем подтвердите. Если они используют валидаторы MVC, то они во власти MS-разработки. Таким образом, у вас может не быть выбора. –

7

Group, что вы хотите в именованный захвата, а затем позволить пробелы до и после захвата

\s*(?<email>\w+([-+.']\w+)@\w+([-.]\w+).\w+([-.]\w+)*)\s* 
+2

Не забывайте «^» и «$». – Tomalak

+1

Не работает с ''. Используйте '\ s * \ w + ([- +. '] \ W +) * @ \ w + ([-.] \ W +) * \. \ W + ([-.] \ W +) * \ s *' вместо этого. –

13

Вы можете разместить \s* до и после рисунка и она должна работать правильно.

+0

Мне понравился ваш ответ. Простой и он работает. Благодарю. – Sunil

+1

ваше предложение работает: '\ s * \ w + ([- +. '] \ W +) * @ \ w + ([-.] \ W +) * \. \ W + ([-.] \ W +) * \ s * ' –

+0

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

1

В случае ASP.NET следующие работы:

<asp:TextBox runat="server" ID="EmailAddress" /> 
<asp:RegularExpressionValidator ValidationExpression="\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*" runat="server" ControlToValidate="EmailAddress" Text="*" ErrorMessage="Email is not valid" /> 

Позволяет множество сообщений электронной почты, как:

"[email protected]" 
" [email protected] " 
"[email protected]" 
" [email protected] " 

и т.д.

Убедитесь, что вы удалите пробелы в коде например:

VB Dim Email as string = EmailAddress.Text.Trim()

C# string Email = EmailAddress.Text.Trim();

0

Я собирался «ответ» это как простой комментарий, но реальный ответ на ваш вопрос в том, что нет ответа.

Почему?

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

Вы пытаетесь передать адрес электронной почты с пробельными символами вокруг него в SMPTP-управление, например, и попытайтесь отправить его, не получится!

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

\ ш + ([- + '.] \ W +) @ \ W + ([-]. \ W +) \ W + (. [-.] \ ш +) *

или даже это

/[email protected]+/

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

Действительно, путь к нему - это TRIM() строка перед тем, как перейти к элементу управления электронной почты, чтобы использовать его.

Просто предупреждаю вас.

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