2月25日15:52:17 补充
有大佬指出正则表达式的写法更好,并给出了代码,我深感赞同,将代码贴上,供参考。
public static bool IsEmail(string inputData) {Regex RegEmail = new Regex("^[\\w-]+@[\\w-]+\\.(com|net|org|edu|mil|tv|biz|info)$"); //w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样 Match m = RegEmail.Match(inputData); return m.Success; }
感谢大佬:飞天狐狸007
起因:
今天在书上看到一个小demo,用来判断邮箱格式是否正确。我觉得书上写的判断不是特别完善,所以自己琢磨了琢磨写了下来。当然也有可能有些不完善没有考虑到的地方,我以后琢磨琢磨在补充,也欢迎各位指正批评。
思路:
邮箱的格式大概为username@
,我观察了观察,大概有这么几个特点:
有且只有一个“@”必须含有“.”“@”出现在“.”之前“@”不可以是第一个位“.”不能是最后一位“@”后面不能直接就是“.”,两者之间要有内容
大概就先想到这么多。
主要就是运用字符串的一些操作。
做一些补充,今天在网上看了一下,邮箱还有一些特殊的:xxx@
,可能会出现多个点,每个点之间也应该有内容,我没找到相关的函数,苦苦思索不得其解。但是忽然灵机一动,其实两个点之间要有内容,就是不能出现..
的子串,而且上面的第六条也就是也不能出现@.
的子串。
所以在程序下做了一些修改和完善。
代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CSHARP_TEST{class Program{//判断邮箱是否合法static public bool judgeEmailAddress(string emailAddress){//有“@”if (emailAddress.IndexOf("@")==-1){Console.WriteLine("输入的字符串中 没有@ !");return false; }//只有一个“@”if (emailAddress.IndexOf("@") != emailAddress.LastIndexOf("@")){Console.WriteLine("输入的字符串中 有多个@ !");return false;}//有“.”if (emailAddress.IndexOf(".") == -1){Console.WriteLine("输入的字符串中 没有. !");return false;}//“@”出现在第一个“.”之前if (emailAddress.IndexOf("@") > emailAddress.IndexOf(".")){Console.WriteLine("输入的字符串中 @没有出现在.之前!");return false;}//“@”不可以是第一个元素if (emailAddress.StartsWith("@")){Console.WriteLine("输入的字符串中 @是第一个元素!");return false;}//“.”不可以是最后一位if (emailAddress.EndsWith(".")){Console.WriteLine("输入的字符串中 .是最后一位!");return false;}//不能出现“@.”if (emailAddress.IndexOf("@.") != -1){Console.WriteLine("输入的字符串中 出现了@. !");return false;}//不能出现“..”if (emailAddress.IndexOf("..") != -1){Console.WriteLine("输入的字符串中 出现了.. !");return false;}return true;}static void Main(string[] args){string email_address;Console.WriteLine("请输入邮箱地址:");email_address = Console.ReadLine();//判断邮箱地址是否合法if (judgeEmailAddress(email_address) == false){Console.WriteLine("E-mail address is illegal !");}else{Console.WriteLine("输入格式正确!");}}}}