【问题标题】:validation: '@' cannot be more than one character验证:'@' 不能超过一个字符
【发布时间】:2016-12-23 05:56:27
【问题描述】:

我无法从脑海中理解这个问题的逻辑。请你帮帮我好吗?

我为练习进行了手动电子邮件验证。因此,在电子邮件验证中,有一个验证声明:“@ 不能超过一个。”

我被困在这里:

            int atValidation = 0;
        for (int i = 0; i < txtEmail.Text.Length; i++)
        {
            if (Char.IsSymbol('@'))
            {
                atValidation++;
            }
        }

如果我的问题令人困惑,我很抱歉,我只能这样解释 vvv
示例:
输入邮箱 |_______|
输入邮箱 | rich@rd@aha.com |
消息框'@'不能超过一个
输入邮箱 | richard@aha.com |
消息框电子邮件有效

【问题讨论】:

  • 你能澄清你的问题吗?我有点困惑。另外,上面的代码 supposed 是如何工作的?它是否试图弄清楚字符串中是否有多个“@”符号?
  • 另外,您是否也在实施其他验证规则(或仅此一条)?您如何定义“有效”的电子邮件地址?您能否举例说明您想接受和拒绝的电子邮件地址?
  • 您唯一的问题是“请帮帮我”。你到底想要什么?

标签: c# validation email visual-c#-express-2010


【解决方案1】:

有几种方法可以做到这一点。我在下面展示的第一个示例是“直接”LINQ 查询,第二个示例是使用循环的extension method。 (如果您不熟悉,扩展方法是一种在不修改原始代码的情况下向类“添加”方法的方法;它是Decorator Pattern)。

LINQ 查询方法:

int count = email.Count(c => c == '@');

这将为您提供“@”符号出现的次数。如果count &gt; 1 你知道有重复。 (实际上,您希望“count”恰好为 1;如果为 0,则根本没有“@”符号)。

上述解决方案的缺点是它不是很灵活(如果你想实现更多的规则,你实际上会做更多的循环,这并不是那么有效)而且它总是会通过整个字符串;知道一旦 count == 2 就可以停止计数,这还不够“聪明”。

这是另一个:

public static class LinqExtensions
{
    public static bool ContainsMultiple<T>(this IEnumerable<T> enumerable, T item)
    {
        bool seen = false;

        foreach (T t in enumerable)
        {
            if (t.Equals(item))
            {
                if (seen) return true;
                else seen = true;
            }
        }

        return false;
    }
}

你可以这样使用它:

bool multiple = email.ContainsMultiple('@');

此解决方案还存在一定程度的不灵活性(检查多个规则的唯一方法是实现多个循环/查询)。但是,知道一旦找到重复项就可以停止搜索字符串,这已经足够“聪明”了。它也可以重复使用。

你也可以这样做:

【讨论】:

    【解决方案2】:

    还有其他更好的方法来验证电子邮件,例如 MailAddress 类和正则表达式。

    您可以在此处找到示例:

    邮件地址: Regex Email validation

    正则表达式: Best Regular Expression for Email Validation in C#

    【讨论】:

    • 而且他们中的大多数不会验证每封可能的电子邮件。最好的电子邮件验证是向它发送一些东西。
    【解决方案3】:

    还有更多的电子邮件验证规则,但如果您只想检查单个 @ 符号,您可以获取所有 @ 字符并检查计数

    if (txtEmail.Text.ToCharArray().Where(x => x == '@').Count() != 1)
    {
         //email is invalid
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      相关资源
      最近更新 更多