验证:& # 39;@ # 39;不能超过一个字符

本文关键字:字符 一个 不能 验证 | 更新日期: 2023-09-27 18:02:35

我想不出这个问题的逻辑。你能帮帮我吗?

我做了一个手动邮件验证练习。因此,在电子邮件验证中,有一个验证声明:"@不能多于1。"

I'm stuck from here:

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

如果我的问题让你困惑了,我很抱歉,我只能这样解释vvv
例子:
输入邮箱|_______|
输入邮箱| rich@rd@aha.com |
消息框: '@'不能多于一个
输入邮箱| richard@aha.com |
<消息框/em>: 电子邮件是有效的

验证:& # 39;@ # 39;不能超过一个字符

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

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

还有其他更好的方法来验证电子邮件,例如MailAddress类和regex。

你可以在这里找到例子:

MailAddress:电子邮件验证

正则表达式:c#中Email验证的最佳正则表达式

有几种方法可以做到这一点。下面我展示的第一个例子是一个"直接的"LINQ查询,第二个例子是一个使用循环的扩展方法。(扩展方法,如果你不熟悉,是一种"添加"一个方法到类而不修改原始代码的方式;这是一个Decorator Pattern)。

LINQ查询方法:

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

这将给出"@"符号出现的次数。如果是count > 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('@');

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

你也可以这样做: