Heim  >  Artikel  >  Backend-Entwicklung  >  C#-Open-Source-Tool für reguläre Ausdrücke

C#-Open-Source-Tool für reguläre Ausdrücke

黄舟
黄舟Original
2017-02-07 15:55:541288Durchsuche

Lassen Sie mich zunächst einige Hintergrundinformationen geben. In meiner Arbeit werden in letzter Zeit häufig reguläre Ausdrücke verwendet . Verwenden Sie es. Das bedeutet nicht, dass Sie es oft bei der Arbeit verwenden, es ist nur so, dass Sie es manchmal verwenden müssen. Aber solange reguläre Ausdrücke eine Zeit lang nicht verwendet werden, geraten sie in Vergessenheit oder werden sogar völlig vergessen. Um dieses nutzlose Problem bis zu einem gewissen Grad zu lösen, habe ich diesen Blog und die Idee dieses Open-Source-Tools zur Überprüfung regulärer Ausdrücke erstellt, das ich schreiben möchte. Es gibt tatsächlich viele Informationen zu regulären Regeln online. Der Grund, warum ich diesen Blog geschrieben habe, besteht darin, einige reguläre Regeln aufzuzeichnen, die in aktuellen oder zukünftigen Arbeiten verwendet werden können, und sie dann zu teilen etwas für .net Open Source.

0. Vorab geschrieben

Ich erinnere mich, dass ich reguläre Ausdrücke das letzte Mal vor drei Jahren verwendet habe, obwohl ich sie im Grunde genommen vergessen habe fast fertig. Wenn also in diesem Blog etwas nicht stimmt, sind Sie herzlich willkommen und danken Ihnen für Ihre Korrektur! Hier habe ich gerade einige regelmäßige Übereinstimmungen aufgeschrieben, die in meiner persönlichen Arbeit häufig verwendet werden. Wenn es Gartenfreunde gibt, die bereit sind, zur Codierung regulärer Open-Source-Tools beizutragen, bin ich herzlich willkommen.

In letzter Zeit gibt es immer mehr „Menstruationsflecken“ im Garten und ich frage mich, sind diese Leute einfach zu untätig? Wenn Sie Zeit haben, diese Sprache und dieses Umfeld zu kritisieren, können Sie genauso gut Ihre Arme öffnen und den .net-Open-Source-Trend annehmen. Mit der Ankunft von .net Open Source ist auch der Frühling von .net da. Wir sollten unsere Hände ausstrecken, um etwas für .net Open Source zu tun und die .net-Community immer mehr Open Source zu machen. Das ist natürlich kein Thema, diese Menstruationspflaster gehen mich nichts an.

v1. Quellcode-Adresse

https://github.com/toutouge/TouTou.RegexTool Zurück nach oben

Text beginnt

2.1 . : Universeller Abgleich

C#-Universalabgleichsregeln, Sie können die Quellzeichenfolge und den entsprechenden regulären Ausdruck übergeben, wenn Sie

/// <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.: Zahlenabgleich

C# aufrufen Reguläre Ausdrücke stimmen mit Zahlen gemäß verschiedenen Anforderungen überein

/// <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.: Reguläre Zeichenfolgenkürzung

C# fängt die Zeichenfolge zwischen den Anfängen gemäß dem angegebenen Startzeichen ab

/// <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)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn