验证:'@'不能超过一个字符

时间:2016-08-16 18:26:00

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

我无法理解这个问题的逻辑。你能帮帮我吗?

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

我被困在这里:

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

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

3 个答案:

答案 0 :(得分:1)

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

admin

答案 1 :(得分:1)

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

您可以在此处找到示例:

MailAddress: Regex Email validation

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

答案 2 :(得分:1)

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

LINQ查询方法:

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

这将显示'@'符号出现的次数。如果count > 1您知道存在重复项。 (实际上,你希望“count”是完全 1;如果它是0则根本就没有'@'符号。

上述解决方案的缺点是它不是非常灵活(如果你想实现更多的规则,你实际上要做更多的循环,这不是那么有效)并且它将永远经历整个字符串;知道一旦计数== 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('@');

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

你也可以这样做: