我有一个带有正则表达式验证器文本框的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))"
答案 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))"