집 >백엔드 개발 >C#.Net 튜토리얼 >C# 정규식 오픈 소스 도구
먼저 배경을 말씀드리겠습니다. 최근 제 작업에서 정규 표현식이 자주 사용되는데, 개인적으로 정규 표현식은 사용하고 싶지 않다고 생각합니다. . 사용하세요. 직장에서 자주 사용한다는 뜻이 아니라 가끔 사용해야 한다는 뜻입니다. 그러나 정규식을 일정 기간 동안 사용하지 않으면 잊어버리거나 완전히 잊어버릴 수도 있습니다. 이 쓸데없는 문제를 어느 정도 해결하기 위해 이 블로그와 제가 작성하려고 하는 오픈소스 정규식 검증 도구에 대한 아이디어가 떠올랐습니다. 실제로 온라인에는 규칙적인 규칙에 대한 많은 정보가 있습니다. 제가 이 블로그를 쓴 이유는 단지 현재 또는 미래의 작업에 사용될 수 있는 몇 가지 규칙적인 규칙을 기록하고 동시에 공유하기 위함입니다. .net 오픈 소스를 위한 것.
0. 앞에 쓴다
정규식을 진지하게 사용한 게 3년 전이었던 것으로 기억한다. 그 기간 동안에도 가끔 사용했지만 기본적으로는 잊어버렸다. 거의 완료되었습니다. 따라서 이 블로그에 잘못된 것이 있으면 언제든지 수정해 주셔서 감사합니다! 여기에는 내 개인 작업에서 일반적으로 사용되는 몇 가지 정기적인 일치 항목을 적어 두었습니다. 정기적인 오픈 소스 도구 코딩에 기꺼이 기여할 정원 친구가 있으면 매우 환영하겠습니다.
최근 텃밭에 '생리패치'가 점점 많아지고 있는데, 이 사람들이 너무 게으른 걸까? 이 언어를 비판하고 환경을 비판할 시간이 있다면 두 팔을 벌려 .net 오픈 소스 트렌드를 받아들이는 것이 나을 것입니다. .net 오픈 소스의 도래와 함께 .net의 봄도 여기에 있습니다. 우리는 .net 오픈 소스를 위해 무언가를 하고 .net 커뮤니티를 점점 더 많은 오픈 소스로 만들기 위해 손을 뻗어야 합니다. 물론 이것은 주제에서 벗어난 것입니다. 생리 패치는 제가 알 바가 아닙니다.
v1.소스코드 주소
https://github.com/toutouge/TouTou.RegexTool 위로 가기
v2. . : 범용 일치
C# 범용 일치 규칙,
/// <summary> /// 检测字符串中是否包含符合正则的子集 /// </summary> /// <param name="source">源字符串</param> /// <param name="reg">正则, e.g. \d+</param> /// <returns>true:包含,反之不包含</returns> publicbool CheckContainsByReg(string source, string reg) { returnRegex.Match(source, reg).Success; } /// <summary> /// 检测整个字符串是否能匹配正则,而不是包含 /// </summary> /// <param name="source">源字符串</param> /// <param name="reg">正则, e.g. ^\d+$</param> /// <returns>true:匹配,反之不匹配</returns> publicbool CheckStringByReg(string source, string reg) { Regex rg = newRegex(reg, RegexOptions.IgnoreCase); return rg.IsMatch(source); } /// <summary> /// 从指定字符串中过滤出第一个符合正则匹配的子集 /// </summary> /// <param name="source">源字符串</param> /// <param name="reg">正则, e.g. \d+</param> /// <returns>源字符串的第一个匹配的子集</returns> publicstring GetFirstStringByReg(string source, string reg) { returnRegex.Match(source, reg).Groups[0].Value; } /// <summary> /// 从指定字符串中过滤出所有符合正则匹配的子集 /// </summary> /// <param name="source">源字符串</param> /// <param name="reg">正则, e.g. \d+</param> /// <returns>true:匹配,反之不匹配</returns> publicList<string> GetStringByReg(string source, string reg) { var regex = Regex.Matches(source, reg); List<string> list =newList<string>(); foreach (Match item in regex) { list.Add(item.Value); } return list; }
호출 시 소스 문자열과 해당 정규식을 전달할 수 있습니다. 2.2.: 숫자 일치
C# 정규식 다양한 요구에 따라 숫자 일치
/// <summary> /// 从指定字符串中过滤出第一个数字 /// </summary> /// <param name="source">源字符串</param> /// <returns>源字符串的第一个数字</returns> publicstring GetFirstNumberByString(string source) { returnRegex. Match(source, @"\d+").Groups[0].Value; } /// <summary> /// 从指定字符串中过滤出最后一个数字 /// </summary> /// <param name="source">源字符串</param> /// <returns>源字符串的最后一个数字</returns> publicstring GetLastNumberByString(string source) { var reg = Regex.Matches(source, @"\d+"); return reg[reg.Count -1].Value; } /// <summary> /// 从指定字符串中过滤出所有数字 /// </summary> /// <param name="source">源字符串</param> /// <returns>源字符串的所有数字</returns> publicList<string> GetAllNumberByString( string source) { var reg = Regex.Matches(source, @"\d+"); List<string> list =newList<string>(); foreach (Match item in reg) { list.Add(item.Value); } return list; } /// <summary> /// 检车源字符串中是否包含数字 /// </summary> /// <param name="source">源字符串</param> /// <returns>true:源字符串包含数字;false:源字符串不包含数字</returns> publicbool CheckNumberByString(string source) { returnRegex. Match(source, @"\d").Success; } /// <summary> /// 判断字符串是否全部是数字且长度等于指定长度 /// </summary> /// <param name="source">源字符串</param> /// <param name="length">指定长度</param> /// <returns>返回值</returns> publicbool CheckLengthByString(string source, int length) { Regex rg = newRegex(@"^\d{" + length +"}$"); return rg.IsMatch(source); }
2.3.: 일반 문자열 가로채기
C#은 주어진 시작 문자에 따라 시작 사이의 문자열을 가로채기
/// <summary> /// 截取字符串中开始和结束字符串中间的字符串 /// </summary> /// <param name="source">源字符串</param> /// <param name="startStr">开始字符串</param> /// <param name="endStr">结束字符串</param> /// <returns>中间字符串</returns> publicstring Substring(string source, string startStr, string endStr) { Regex rg = newRegex("(?<=(" + startStr +"))[.\\s\\S]*?(?=(" + endStr +"))", RegexOptions.Multiline |RegexOptions.Singleline); return rg.Match(source).Value; }
2.4.: 邮箱匹配
C#正则表达式匹配邮箱
/// <summary> /// 匹配邮箱是否合法 /// </summary> /// <param name="source">待匹配字符串</param> /// <returns>匹配结果true是邮箱反之不是邮箱</returns> publicbool CheckEmailByString(string source) { Regex rg = newRegex("^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$", RegexOptions.IgnoreCase); return rg.IsMatch(source); }
2.5.: URL匹配
C#正则表达式匹配URL
/// <summary> /// 匹配URL是否合法 /// </summary> /// <param name="source">待匹配字符串</param> /// <returns>匹配结果true是URL反之不是URL</returns> publicbool CheckURLByString(string source) { Regex rg = newRegex(@"^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)? (((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\. (\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]) ([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])* ([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]) ([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~| [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])| (%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)? (\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~| [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$" , RegexOptions.IgnoreCase); return rg.IsMatch(source); }
2.6.: 日期匹配
C#正则表达式匹配日期
/// <summary> /// 匹配日期是否合法 /// </summary> /// <param name="source">待匹配字符串</param> /// <returns>匹配结果true是日期反之不是日期</returns> publicbool CheckDateByString(string source) { Regex rg = newRegex(@"^(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])| ((1|2)[0-9])|30|31)[\/\-]\d{4})$"); return rg.IsMatch(source); } /// <summary> /// 从字符串中获取第一个日期 /// </summary> /// <param name="source">源字符串</param> /// <returns>源字符串中的第一个日期</returns> publicstring GetFirstDateByString(string source) { returnRegex.Match(source,@"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])| ((1|2)[0-9])|30|31)[\/\-]\d{4})").Groups[0].Value; } /// <summary> /// 从字符串中获取所有的日期 /// </summary> /// <param name="source">源字符串</param> /// <returns>源字符串中的所有日期</returns> publicList<string> GetAllDateByString( string source) { var all = Regex.Matches(source, @"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2]) [\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})"); List<string> list =newList<string>(); foreach (Match item in all) { list.Add(item.Value); } return list; }
2.7.: 密码匹配
C#正则表达式匹配密码
/// <summary> /// 检测密码复杂度是否达标:密码中必须包含字母、数字、特称字符,至少8个字符,最多16个字符。 /// </summary> /// <param name="source">待匹配字符串</param> /// <returns>密码复杂度是否达标true是达标反之不达标</returns> publicbool CheckPasswordByString(string source) { Regex rg = newRegex(@"^(?=.*\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}$"); return rg.IsMatch(source); }
2.8.: 邮编匹配
C#正则表达式匹配邮编
/// <summary> /// 匹配邮编是否合法 /// </summary> /// <param name="source">待匹配字符串</param> /// <returns>邮编合法返回true,反之不合法</returns> publicbool CheckPostcodeByString(string source) { Regex rg = newRegex(@"^\d{6}$"); return rg.IsMatch(source); }
2.9.: 电话号码
C#正则表达式匹配电话
/// <summary> /// 匹配电话号码是否合法 /// </summary> /// <param name="source">待匹配字符串</param> /// <returns>电话号码合法返回true,反之不合法</returns> publicbool CheckTelephoneByString(string source) { Regex rg = newRegex(@"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"); return rg.IsMatch(source); } /// <summary> /// 从字符串中获取电话号码 /// </summary> /// <param name="source">源字符串</param> /// <returns>源字符串中电话号码</returns> publicstring GetTelephoneByString(string source) { returnRegex. Match(source, @"(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}").Groups[0].Value; }
2.10.: 手机号码
C#正则表达式匹配手机号码
/// <summary> /// 匹配手机号码是否合法 /// </summary> /// <param name="source">待匹配字符串</param> /// <returns>手机号码合法返回true,反之不合法</returns> publicbool CheckMobilephoneByString(string source) { Regex rg = newRegex(@"^[1]+[3,5,7]+\d{9}$"); return rg.IsMatch(source); } /// <summary> /// 从字符串中获取手机号码 /// </summary> /// <param name="source">源字符串</param> /// <returns>源字符串中手机号码</returns> publicstring GetMobilephoneByString(string source) { returnRegex. Match(source, @"[1]+[3,5,7]+\d{9}").Groups[0].Value; }
2.11.: 身份证匹配
C#正则表达式匹配身份证号码
/// <summary> /// 匹配身份证号码是否合法 /// </summary> /// <param name="source">待匹配字符串</param> /// <returns>身份证号码合法返回true,反之不合法</returns> publicbool CheckIDCardByString(string source) { Regex rg = newRegex(@"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$"); return rg.IsMatch(source); } /// <summary> /// 从字符串中获取身份证号码 /// </summary> /// <param name="source">源字符串</param> /// <returns>源字符串中身份证号码</returns> publicstring GetIDCardByString(string source) { returnRegex. Match(source, @"(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))").Groups[0].Value; }
v3.博客总结
关于C#正则表达式开源工具暂时就只积累了这么多。因为目前实际工作中遇到的也就这些,关于这个C#正则表达式开源工具现在只是一个雏形,先把这一分不分享出来,后续得会持续更新C#正则表达式开源工具。希望在以后这个C#正则表达式工具会越来越strong,更希望能得到园友们的support.
以上就是C#正则表达式开源工具的内容,更多相关内容请关注PHP中文网(www.php.cn)!