调试后正则表达式无效

时间:2009-07-10 14:38:23

标签: asp.net regex visual-studio-2008 visual-studio-express

我有一个带有正则表达式验证器文本框的ASP.NET网站。

我已经更改了正则表达式验证属性“验证器表达式”中的表达式,并且在编译(重建)和运行之后,验证CHANGE没有反映。

之前的验证工作正常,但更改的验证无效。

请帮助我!

编辑:

第一个代码:

([a-zA-Z0-9_-.]+)\@((base.co.uk)|(base.com)|(group.com))

第二段代码:

@"([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com))"

2 个答案:

答案 0 :(得分:0)

假设你的“第一个代码”是一个文字正则表达式,你需要用反斜杠转义字符类中的连字符。

您的“第二个代码”是一个格式化为C#逐字字符串的正则表达式,它将匹配电子邮件地址,例如whatever@base.co.uk就好了。这个正则表达式没有错。

如果它不能按照您想要的方式运行,您将必须发布使用此正则表达式的代码。

答案 1 :(得分:-1)

在这一部分:[a-zA-Z0-9_\-.]你正在逃避连字符。将连字符放在正则表达式字符类中的正确方法是在第一个位置(或者它认为它是范围的一部分):

[-a-zA-Z0-9_.]

然后你从@之前删除了反斜杠。在Perl中,@将被视为列表名称的一部分,但在C#中,我不确定它有什么效果不能逃脱它。

这些时期的逃离也是可疑的。您可能需要将它们加倍:例如\\。相反,我会在一段时间内做的是使用一个字符类:即[。]在字符类中,句点失去了它的特殊含义。

试试这个:

@"([-a-zA-Z0-9_.]+)\@((base[.]co[.]uk)|(base[.]com)|(group[.]com)|(arg[.]co[.]uk)|(arggroup[.]com))"