【发布时间】:2020-12-11 14:49:31
【问题描述】:
关于电子邮件/用户名正则表达式有很多问题,我不打算添加,但我找不到确切的答案。我正在尝试匹配和替换给定字符串中的电子邮件 ID。
条件:
- 整个电子邮件 ID 可能包含 (a-z,A-Z, 0-9,.,-,_)
- 用户名或域可以是 1 个或多个字母,因此
x@y.z是有效的电子邮件。 - 用户名和域必须以 [a-zA-z0-9] 开头或结尾。即不应以 [ ._- ] 开头或结尾
我正在使用以下代码将它们替换为 ***(3 个星号)。
string replacedtext = Regex.Replace("Emails: x@x.co.uk , -x@x.co.uk, x-@xx.co.uk , xx@xx-.com, xx@x.x.com-", @"[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z-_]{2,6}", "***");
在大多数情况下效果很好,但在某些情况下会失败。
所需输出:Emails: *** , -***, x-@xx.co.uk , xx@xx-.com, ***-
电流输出:Emails: *** , ***, *** , ***, ***
它会替换整个 -x@x.co.uk,因为它应该只替换 x@x.co.uk 并忽略连字符。
【问题讨论】:
-
您的第三个条件不清楚:根据您的句子的第一部分允许“a-”(“必须以 [a-zA-z0-9] 开头或结尾”),但不是根据第二部分(“不应以 [ \._- ] 开头或结尾”)
-
另外,我没有得到“xx@xx-.com”的例子。域“xx-.com”似乎满足所有条件,但您希望它能够匹配吗?
-
所以系统会拒绝一个人的电子邮件(这在现实世界中有效),因为它没有通过你的测试?在任何系统中验证电子邮件作为用户名似乎是一件愚蠢的事情。