关于邮件地址的regular expression 问题

王朝other·作者佚名  2006-01-10
宽屏版  字体: |||超大  

一个邮件系统需要下面的规则:

Username:

Begin with (a-zA-Z0-9_\-\.’)

Contain (a-zA-Z0-9_\-\.’)

Can’t have two adjacent periods

Domain:

Begin and end with (a-zA-Z0-9)

Contain (a-zA-Z0-9_\-\.)

Can’t have two adjacent periods

我写的规则如下:

internal static readonly Regex regEmail = new Regex(@"^(\.|(\.?[a-zA-Z0-9_'\-]+\.?)+)@[a-zA-Z0-9]([a-zA-Z0-9_\-]*\.?[a-zA-Z0-9_\-]+)*\.([a-zA-Z0-9_\-]+\.?[a-zA-Z0-9_\-]*)*[a-zA-Z0-9]$" , RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.CultureInvariant);

为了简化问题,对于username:我们假设它包含(\w)和(.),对于domain:,我们假设开头和结尾是(a),中间是(\w)和(.)。 我的写法是:@"^(([\w]+\.?)+|(\.([\w]+\.?)*))@[a]([\w]*\.?[\w]+)*\.([\w]+\.?[\w]*)*[a]$"

我没有用\w代替[a-zA-Z0-9_],是因为我没有选择RegexOptions.ECMAScript。另外,在MSDN中对RegexOptions.ECMAScript的描述如下:

“指定已为表达式启用了符合 ECMAScript 的行为。此选项仅可与 IgnoreCase 和 Multiline 标志一起使用。将 ECMAScript 同任何其他标志一起使用将导致异常。”

但是它可以与以下options连用,但并没有导致异常:

RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.ECMAScript

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有