正则表达式电子邮件 - 忽略前导和尾随空格?

12
我们正在ASP.NET中使用以下内容进行电子邮件验证:
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

如何修改代码来忽略前导和尾随空格?

实际的修剪在 postback 代码中处理,但如果用户因复制粘贴而多了一个空格,则验证器会触发为无效。


你应该阅读这个链接:http://mail.python.org/pipermail/python-list/2006-September/404146.html - Gumbo
发送测试消息不是一个选择。 在提交之前,需要尽可能在表单上进行验证。 - schooner
5个回答

19

您可以在模式前后放置\s*,这样它应该可以正常工作。


1
您的建议有效:\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s* - Vaibhav Garg
我知道这篇文章很老了,但我认为它今天仍然非常相关。如果目标是为原始用户输入的电子邮件创建一个正则表达式,那么我认为这是正确的答案。但是,如果您想要一个用于有效电子邮件的正则表达式,则此方法是错误的。在大型应用程序中,您将希望在许多层中重复使用相同的正则表达式,在小型应用程序中,这种方法可以正常工作,但您应该知道它不可扩展。 - Chris Stephens

7
将您想要的内容分组为命名捕获,然后允许在捕获之前和之后添加空格。
\s*(?<email>\w+([-+.']\w+)@\w+([-.]\w+).\w+([-.]\w+)*)\s*

1
不能与 <asp:RegularExpressionValidator> 一起使用。请改用 \s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s* - Vaibhav Garg

4

在将其传递给验证器之前,请先进行裁剪。


这是一个与文本框相关联的asp.net验证器,因此默认情况下不确定是否可能。如果可能的话,我更喜欢使用正则表达式来处理它。 - schooner
1
为什么?空格不是有效电子邮件的一部分,因此正则表达式不应该将它们视为一部分。使用onchange/onsubmit操作修剪值。 - Peter Boughton
我更喜欢这种方法而不是用正则表达式。 “myemail@email.com”的格式并不正确。多余的空格更多地与数据源有关。就像您不会使用与接受空格的相同电子邮件正则表达式验证数据库中的电子邮件一样。如果您从查询字符串中获取电子邮件,则不会使用允许编码内容的正则表达式,您需要先解码,然后再进行验证。如果他们正在使用MVC验证器,则受制于MS工程师。因此您可能没有选择。 - Chris Stephens

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"  />

允许各种电子邮件,例如:

"some@one.com"
"  some@one.com  "
"so_me@one.co.uk"
" a.s-d__+f@asd.as.as "

请确保您的代码中去除了空格,像这样:

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

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


0

我本来想把这个问题简单地回答一下,但实际上你的问题的真正答案是没有答案

为什么呢?

因为任何带有空格或空白字符的电子邮件地址都是无效的电子邮件地址。

例如,如果您尝试将一个带有空格字符的电子邮件地址传递到 SMPTP 控件中并尝试发送它,它将失败

所有电子邮件地址都必须从这个正则表达式的角度进行验证...

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

或者甚至是这个

/.+@.+/

任何其他的都是无效的电子邮件地址。

真正的解决方法是在将字符串传递到电子邮件控件之前对其进行TRIM()处理。

只是提醒你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接