关于邮件地址的regular expression 问题

一个邮件系统需要下面的规则:
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]$" , RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.CultureInvariant);

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

Published At
Categories with Web编程
Tagged with
comments powered by Disqus