我无法理解这个问题的逻辑。你能帮帮我吗?
我为练习做了手动电子邮件验证。因此,在电子邮件验证中,有一个验证表明:“@不能超过一个。”
我被困在这里:
int atValidation = 0;
for (int i = 0; i < txtEmail.Text.Length; i++)
{
if (Char.IsSymbol('@'))
{
atValidation++;
}
}
如果我的问题令人困惑,我很抱歉,我只能这样解释 vvv
例如:
输入电子邮件| _______ |
输入电子邮件|富有@ rd @ aha.com |
消息框:'@'不能超过一个
输入电子邮件| richard@aha.com |
消息框:电子邮件有效
答案 0 :(得分:1)
还有更多的电子邮件验证规则,但如果您只想检查单个@符号,则可以获取所有@字符并检查计数
admin
答案 1 :(得分:1)
答案 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('@');
此解决方案也存在一定程度的不灵活性(检查多个规则的唯一方法是实现多个循环/查询)。但是,它很“聪明”,足以知道一旦找到重复内容就可以停止搜索字符串。它也可以重复使用。
你也可以这样做: