验证:& # 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>: 电子邮件是有效的
电子邮件验证还有许多规则,但是如果您只想检查单个@符号,则可以获取所有@字符并检查计数
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('@');
该解决方案还存在一定程度的不灵活性(检查多个规则的唯一方法是实现多个循环/查询)。然而,它足够"聪明",知道一旦找到重复的字符串就可以停止搜索。它也是可重复使用的。
你也可以这样做: