我尝试使用正则表达式来验证电子邮件地址,电子邮件地址的规则之一是,他们可以在“' @'之前使用可选的号码。标志。但是,当程序进入该评估时,该数字永远不是可选的。
我目前有:
Regex.IsMatch(user.EmailAddress, Regex.Escape(basicExpected) + @"^\d{1}?$" + "@email.com")
basicExpected
是string basicExpected = user.GivenName + "." + user.Surname;
所以电子邮件地址应为
first.last {optional number} @ email.com
作为dumby数据,两个例子是:
第二个john doe获得2,因为Active Directory中有两个人名为John Doe,所以这个数字是两者之间的伪装差异。当评估结束时,由于没有数字,john.doe@live.ca将被确定为不正确
更新
我将阅读$
作为?
犯了大错,因此\d?
是正确的我只是一直误读。我为我的错误道歉,感谢你坚持找到解决方案
答案 0 :(得分:1)
你的问题是你的量词并没有表明这个数字是可选的,它说它是懒惰而不是贪婪。
\d{1}? # this is incorrect
正则表达式中的可选单个数字构造起来更简单。试试这个:
\d? # this is preferable
答案 1 :(得分:0)
如果我读对了我解释的内容:
first.last{optional number}@email.com
应与
user.GivenName + "." + user.Surname + "^\d{1}?$" + ".@email.com"
我在这里看到一些问题:
"^\d{1}?$"
:^
和$
表示开始和结束。你不希望这样,因为你周围有其他的东西。
.
?<强>结论:强>
"\d?"
是你想要的条件号码,并在 @ email.com 之前删除.