>  기사  >  백엔드 개발  >  C# 정규식 오픈 소스 도구

C# 정규식 오픈 소스 도구

黄舟
黄舟원래의
2017-02-07 15:55:541232검색

먼저 배경을 말씀드리겠습니다. 최근 제 작업에서 정규 표현식이 자주 사용되는데, 개인적으로 정규 표현식은 사용하고 싶지 않다고 생각합니다. . 사용하세요. 직장에서 자주 사용한다는 뜻이 아니라 가끔 사용해야 한다는 뜻입니다. 그러나 정규식을 일정 기간 동안 사용하지 않으면 잊어버리거나 완전히 잊어버릴 수도 있습니다. 이 쓸데없는 문제를 어느 정도 해결하기 위해 이 블로그와 제가 작성하려고 하는 오픈소스 정규식 검증 도구에 대한 아이디어가 떠올랐습니다. 실제로 온라인에는 규칙적인 규칙에 대한 많은 정보가 있습니다. 제가 이 블로그를 쓴 이유는 단지 현재 또는 미래의 작업에 사용될 수 있는 몇 가지 규칙적인 규칙을 기록하고 동시에 공유하기 위함입니다. .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})|[!\$&&#39;\(\)\*\+,;=]|:)*@)?
(((\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})|[!\$&&#39;\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|
(%[\da-f]{2})|[!\$&&#39;\(\)\*\+,;=]|:|@)*)*)?)?
(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&&#39;\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&&#39;\(\)\*\+,;=]|:|@)|\/|\?)*)?$" , 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)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.