打印本文 打印本文 关闭窗口 关闭窗口
关于邮件地址的regular expression 问题
作者:武汉SEO闵涛  文章来源:敏韬网  点击数989  更新时间:2009/4/25 0:44:54  文章录入:mintao  责任编辑:mintao

一个邮件系统需要下面的规则:
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

打印本文 打印本文 关闭窗口 关闭窗口