彙總系列:http://www.javashuo.com/article/p-dojeygnv-gw.htmlhtml
Jupyter排版:http://www.javashuo.com/article/p-nktbmdez-g.htmlpython
在線瀏覽:http://nbviewer.jupyter.org/github/lotapp/BaseCode/tree/master/python/notebook/1.POP/2.strlinux
事先聲明一下,避免讓新手進入誤區:不是說Python比NetCore要好,而Python設計的目的就是==》讓程序員解放出來,不要過於關注代碼自己,那麼性能、規範等等各方面隱患就存在了,後面編寫一個稍微大點的項目就看出來了。並且不要太受語言約束,以前我也說過,用各自語言的優點來爲項目服務~ 這纔是開發王道。好比Python用來數據分析,Go用來併發處理等等,很少說了,記住一句話便可:「Net是性價比最高的」git
步入正題:歡迎提出更簡單或者效率更高的方法程序員
基礎系列:(這邊重點說說Python,上次講過的東西我就一筆帶過了)github
1.輸出+類型轉換Python寫法:NetCore:編程
2.字符串拼接+拼接輸出方式api
python:數組
NetCore併發
3.字符串遍歷、下標、切片
重點說下python的下標,有點意思,最後一個元素,咱們通常都是len(str)-1,他能夠直接用-1,倒2天然就是-2了
#最後一個元素:user_str[-1]user_str[-1]user_str[len(user_str)-1] #其餘編程語言寫法#倒數第二個元素:user_str[-2]此次爲了更加形象對比,一句一句翻譯成NetCore(有沒有發現規律,user_str[user_str.Length-1]==》-1是最後一個,user_str[user_str.Length-2]==》-2是最後一個。python在這方面簡化了)
3.2 python切片語法:[start_index:end_index:step] (end_index取不到)
# 切片:[start_index:end_index:step] (end_index取不到) # eg:str[1:4] 取str[1]、str[2]、str[3] # eg:str[2:] 取下標爲2開始到最後的元素 # eg:str[2:-1] 取下標爲2~到倒數第二個元素(end_index取不到) # eg:str[1:6:2] 隔着取~str[1]、str[3]、str[5](案例會詳細說) # eg:str[::-1] 逆向輸出(案例會詳細說,)來個案例:我註釋部分說的很詳細了,附錄會貼democode的
NetCore,其實你用Python跟其餘語言對比反差更大,net真的很強大了。補充(對比看就清楚Python的step爲何是2了,i+=2==》2)
方法系列:
# 查找:find,rfind,index,rindexPython查找推薦你用 find和rfindnetcore: index0f就至關於python裏面的 find
# 計數:countpython: str.count()netcore:這個真用基礎來解決的話,兩種方法:第一種本身變形一下: (原字符串長度 - 替換後的長度) / 字符串長度int count = 0; int index = input.IndexOf("abc"); while (index != -1) { count++; index = input.IndexOf("abc", index + 3);//index指向abc的後一位 }
Python補充說明:像這些方法練習用 ipython3就行了( sudo apt-get install ipython3),code的話須要一個個的print,比較麻煩(我這邊由於須要寫文章,因此只能一個個code)index查找不到會有異常
# 替換:replacePython: xxx.replace(str1, str2, 替換次數)replace能夠指定替換幾回NetCore:替換指定次數的功能有點業餘,就不說了,你能夠自行思考哦~
#鏈接:join:eg:print("-".join(test_list))
netcore:string.Join(分隔符,數組)
#分割:split(按指定字符分割),splitlines(按行分割),partition(以str分割成三部分,str前,str和str後),rpartition
說下split的切片用法 :print(test_input.split(" ",3)) #在第三個空格處切片,後面的不切了
繼續說說 splitlines(按行分割),和split("\n")的區別我圖中給了案例擴展: split(),默認按空字符切割(空格、\t、\n等等,不用擔憂返回'')最後說一下 partition 和 r partition 返回是元祖類型(後面會說的),方式和find同樣,找到第一個匹配的就罷工了【注意一下沒找到的狀況】netcore: split裏面不少重載方法,能夠本身去查看下,eg:Split("\n",StringSplitOptions.RemoveEmptyEntries)再說一下這個: test_str.Split('a');//返回數組。若是要和Python同樣返回列表==》test_str.Split('a').ToList(); 【須要引用linq的命名空間哦】
# 頭尾判斷:startswith(以。。。開頭),endswith(以。。。結尾)netcore:
# 大小寫系:lower(字符串轉換爲小寫),upper(字符串轉換爲大寫),title(單詞首字母大寫),capitalize(第一個字符大寫,其餘變小寫)netcore:
# 格式系列:lstrip(去除左邊空格),rstrip(去除右邊空格),strip(去除兩邊空格)美化輸出系列:ljust,rjust,centernetcore: Tirm很強大,除了去空格還能夠去除你想去除的任意字符ljust,rjust,center這些就不說了,python常常在linux終端中輸出,因此這幾個用的比較多。net裏面 string.Format各類格式化輸出,能夠參考
# 驗證系列:isalpha(是不是純字母),isalnum(是不是數字|字母),isdigit(是不是純數字),isspace(是不是純空格)一張圖搞定,其餘的本身去試一試吧,注意哦~ test_str5=" \t \n " #isspace() ==>truenetcore: string.IsNullOrEmpty 和 string.IsNullOrWhiteSpace 是系統自帶的,其餘的你須要本身封裝一個擴展類(eg:簡單封裝)【附錄有】
附錄:
Python3:
View Code# #輸出+類型轉換 # user_num1=input("輸入第一個數:") # user_num2=input("輸入第二個數:") # print("兩數之和:%d"%(int(user_num1)+int(user_num2))) # # ------------------------------------------------------------ # #字符串拼接 # user_name=input("輸入暱稱:") # user_pass=input("輸入密碼:") # user_url="192.168.1.121" # #拼接輸出方式一: # print("ftp://"+user_name+":"+user_pass+"@"+user_url) # #拼接輸出方式二: # print("ftp://%s:%s@%s"%(user_name,user_pass,user_url)) # # ------------------------------------------------------------- # # 字符串遍歷、下標、切片 # user_str="七大姑曰:工做了嗎?八大姨問:買房了嗎?異性說:結婚了嗎?" # #遍歷 # for item in user_str: # print(item,end=" ") # #長度:len(user_str) # print(len(user_str)) # #第一個元素:user_str[0] # print(user_str[0]) # #最後一個元素:user_str[-1] # print(user_str[-1]) # print(user_str[len(user_str)-1])#其餘編程語言寫法 # #倒數第二個元素:user_str[-2] # print(user_str[-2]) # # ------------------------------------------------------------- # 切片:[start_index:end_index:step] (end_index取不到) # eg:str[1:4] 取str[1]、str[2]、str[3] # eg:str[2:] 取下標爲2開始到最後的元素 # eg:str[2:-1] 取下標爲2~到倒數第二個元素(end_index取不到) # eg:str[1:6:2] 隔着取~str[1]、str[3]、str[5](案例會詳細說) # eg:str[::-1] 逆向輸出(案例會詳細說,) it_str="我愛編程,編程愛它,它是程序,程序是誰?" #eg:取「編程愛它」 it_str[5:9] print(it_str[5:9]) print(it_str[5:-11]) #end_index用-xx也同樣 print(it_str[-15:-11])#start_index用-xx也能夠 #eg:取「編程愛它,它是程序,程序是誰?」 it_str[5:] print(it_str[5:])#不寫默認取到最後一個 #eg:一個隔一個跳着取("我編,程它它程,序誰") it_str[0::2] print(it_str[0::2])#step=△index(eg:0,1,2,3。這裏的step=> 2-0 => 間隔1) #eg:倒序輸出 it_str[::-1] # end_index不寫默認是取到最後一個,是正取(從左往右)仍是逆取(從右往左),就看step是正是負 print(it_str[::-1]) print(it_str[-1::-1])#等價於上一個 # # -------------------------------------------------------------View Codetest_str="ABCDabcdefacddbdf" # ------------------------------------------------------------- # # 查找:find,rfind,index,rindex # # xxx.find(str, start, end) # print(test_str.find("cd"))#從左往右 # print(test_str.rfind("cd"))#從右往左 # print(test_str.find("dnt"))#find和rfind找不到就返回-1 # # index和rindex用法和find同樣,只是找不到會報錯(之後用find系便可) # # print(test_str.index("dnt")) # # ------------------------------------------------------------- # # 計數:count # # xxx.count(str, start, end) # print(test_str.count("a")) # # ------------------------------------------------------------- # # 替換:replace # # xxx.replace(str1, str2, count_num) # print(test_str) # print(test_str.replace("b","B"))#並無改變原字符串,只是生成了一個新的字符串 # print(test_str) # # replace能夠指定替換幾回 # print(test_str.replace("b","B",1))#ABCDaBcdefacddbdf # # ------------------------------------------------------------- # 分割:split(按指定字符分割),splitlines(按行分割),,partition(以str分割成三部分,str前,str和str後),rpartition # test_list=test_str.split("a")#a有兩個,按照a分割,那麼會分紅三段,返回類型是列表(List),而且返回結果中沒有a # print(test_list) # test_input="hi my name is dnt" # print(test_input.split(" ")) #返回列表格式(後面會說)['hi', 'my', 'name', 'is', 'dnt'] # print(test_input.split(" ",3))#在第三個空格處切片,後面的無論了 # # 按行分割,返回類型爲List # test_line_str="abc\nbca\ncab\n" # print(test_line_str.splitlines())#['abc', 'bca', 'cab'] # print(test_line_str.split("\n"))#看出區別了吧:['abc', 'bca', 'cab', ''] # # 沒看出來就再來個案例 # test_line_str2="abc\nbca\ncab\nLLL" # print(test_line_str2.splitlines())#['abc', 'bca', 'cab', 'LLL'] # print(test_line_str2.split("\n"))#再提示一下,最後不是\n就和上面同樣效果 # 擴展: # print("hi my name is dnt\t\n m\n\t\n".split())#split(),默認按空字符切割(空格、\t、\n等等,不用擔憂返回'') # #partition,返回是元祖類型(後面會說的),方式和find同樣,找到第一個匹配的就罷工了 # print(test_str.partition("cd"))#('ABCDab', 'cd', 'efacddbdf') # print(test_str.rpartition("cd"))#('ABCDabcdefa', 'cd', 'dbdf') # print(test_str.partition("感受本身萌萌噠"))#沒找到:('ABCDabcdefacddbdf', '', '') # # ------------------------------------------------------------- # # 鏈接:join # # separat.join(xxx) # # 錯誤用法:xxx.join("-") # print("-".join(test_list)) # # ------------------------------------------------------------- # # 頭尾判斷:startswith(以。。。開頭),endswith(以。。。結尾) # # test_str.startswith(以。。。開頭) # start_end_str="http://www.baidu.net" # print(start_end_str.startswith("https://") or start_end_str.startswith("http://")) # print(start_end_str.endswith(".com")) # # ------------------------------------------------------------- # # 大小寫系:lower(字符串轉換爲小寫),upper(字符串轉換爲大寫),title(單詞首字母大寫),capitalize(第一個字符大寫,其餘變小寫) # print(test_str) # print(test_str.upper())#ABCDABCDEFACDDBDF # print(test_str.lower())#abcdabcdefacddbdf # print(test_str.capitalize())#第一個字符大寫,其餘變小寫 # # ------------------------------------------------------------- # # 格式系列:lstrip(去除左邊空格),rstrip(去除右邊空格),strip(去除兩邊空格),ljust,rjust,center # strip_str=" I Have a Dream " # print(strip_str.strip()+"|")#我加 | 是爲了看清後面空格,沒有別的用處 # print(strip_str.lstrip()+"|") # print(strip_str.rstrip()+"|") # #這個就是格式化輸出,就不講了 # print(test_str.ljust(50)) # print(test_str.rjust(50)) # print(test_str.center(50)) # # ------------------------------------------------------------- # 驗證系列:isalpha(是不是純字母),isalnum(是不是數字|字母),isdigit(是不是純數字),isspace(是不是純空格) # test_str2="Abcd123" # test_str3="123456" # test_str4=" \t" # test_str5=" \t \n " #isspace() ==>true # 一張圖搞定,其餘的本身去試一試吧 # test_str.isalpha() # test_str.isalnum() # test_str.isdigit() # test_str.isspace()NetCore:
View Codeusing System; using System.Linq; namespace aibaseConsole { public static class Program { private static void Main() { #region BaseCode //var test="123";//定義一個變量 // Console.WriteLine(test);//輸出這個變量 // // Console.WriteLine("請輸入用戶名:"); // var name = Console.ReadLine(); // // Console.WriteLine("請輸入性別:"); // var gender = Console.ReadLine(); // // Console.WriteLine($"Name:{name},Gender:{gender}"); //推薦用法 // Console.WriteLine("Name:{0},Gender:{1}", name, gender); //Old 輸出 // //// 類型轉換 // Console.WriteLine("輸入第一個數字:"); // var num1 = Console.ReadLine(); // Console.WriteLine("輸入第二個數字:"); // var num2 = Console.ReadLine(); // Console.WriteLine($"num1+num2={Convert.ToInt32(num1)+Convert.ToInt32(num2)}"); // //// Convert.ToInt64(),Convert.ToDouble(),Convert.ToString() // Console.Write("dnt.dkill.net/now"); // Console.WriteLine("帶你走進中醫經絡"); // // var temp = "xxx"; // var tEmp = "==="; // Console.WriteLine(temp + tEmp); // var num = 9; // Console.WriteLine("num=9,下面結果是對2的除,取餘,取商操做:"); // Console.WriteLine(num/2.0); // Console.WriteLine(num%2.0); // Console.WriteLine(num/2); // //指數 // Console.WriteLine(Math.Pow(2,3)); // int age = 24; // // if (age >= 23) // Console.WriteLine("七大姑曰:工做了嗎?八大姨問:買房了嗎?異性說:結婚了嗎?"); // else if (age >= 18) // { // Console.WriteLine(age); // Console.WriteLine("成年了哇"); // } // else // Console.WriteLine("好好學習每天向上"); // int i = 1; // int sum = 0; // while (i <= 100) // { // sum += i; // i++; // } // Console.WriteLine(sum); // var name = "https://pan.baidu.com/s/1weaF2DGsgDzAcniRzNqfyQ#mmd"; // foreach (var i in name) // { // if(i=='#') // break; // Console.Write(i); // } // Console.WriteLine("\n end ..."); #endregion #region String // //# # 字符串遍歷、下標、切片 // //# user_str="七大姑曰:工做了嗎?八大姨問:買房了嗎?異性說:結婚了嗎?" // var user_str = "七大姑曰:工做了嗎?八大姨問:買房了嗎?異性說:結婚了嗎?"; // // //# #遍歷 // //# for item in user_str: // //# print(item,end=" ") // foreach (var item in user_str) // { // Console.Write(item); // } // // //# #長度:len(user_str) // //# print(len(user_str)) // Console.WriteLine(user_str.Length); // // //# #第一個元素:user_str[0] // //# print(user_str[0]) // Console.WriteLine(user_str[0]); // // //# #最後一個元素:user_str[-1] // //# print(user_str[-1]) // //# print(user_str[len(user_str)-1])#其餘編程語言寫法 // Console.WriteLine(user_str[user_str.Length-1]); // // // //# #倒數第二個元素:user_str[-2] // //# print(user_str[-2]) // Console.WriteLine(user_str[user_str.Length-2]); // //# # ------------------------------------------------------------- // // // //# 切片:[start_index:end_index:step] (end_index取不到) // //# eg:str[1:4] 取str[1]、str[2]、str[3] // //# eg:str[2:] 取下標爲2開始到最後的元素 // //# eg:str[2:-1] 取下標爲2~到倒數第二個元素(end_index取不到) // //# eg:str[1:6:2] 隔着取~str[1]、str[3]、str[5](案例會詳細說) // //# eg:str[::-1] 逆向輸出(案例會詳細說,) // // // var it_str = "我愛編程,編程愛它,它是程序,程序是誰?"; // // // //#eg:取「編程愛它」 it_str[5:9] // // print(it_str[5:9]) // // print(it_str[5:-11]) #end_index用-xx也同樣 // // print(it_str[-15:-11])#start_index用-xx也能夠 // // //Substring(int startIndex, int length) // Console.WriteLine(it_str.Substring(5, 4));//第二個參數是長度 // // // // //#eg:取「編程愛它,它是程序,程序是誰?」 it_str[5:] // // print(it_str[5:])#不寫默認取到最後一個 // Console.WriteLine(it_str.Substring(5));//不寫默認取到最後一個 // // //#eg:一個隔一個跳着取("我編,程它它程,序誰") it_str[0::2] // // print(it_str[0::2])#step=△index(eg:0,1,2,3。這裏的step=> 2-0 => 間隔1) // // //這個我第一反應是用linq ^_^ // for (int i = 0; i < it_str.Length; i+=2)//對比看就清除Python的step爲何是2了,i+=2==》2 // { // Console.Write(it_str[i]); // } // // Console.WriteLine("\n倒序:"); // //#eg:倒序輸出 it_str[::-1] // //# end_index不寫默認是取到最後一個,是正取(從左往右)仍是逆取(從右往左),就看step是正是負 // // print(it_str[::-1]) // // print(it_str[-1::-1])#等價於上一個 // for (int i = it_str.Length-1; i>=0; i--) // { // Console.Write(it_str[i]); // } // //其實能夠用Linq:Console.WriteLine(new string(it_str.ToCharArray().Reverse().ToArray())); #endregion #region StringMethod // var test_str = "ABCDabcdefacddbdf"; // //# # 查找:find,rfind,index,rindex // //# # xxx.find(str, start, end) // //# print(test_str.find("cd"))#從左往右 // Console.WriteLine(test_str.IndexOf('a'));//4 // Console.WriteLine(test_str.IndexOf("cd"));//6 // //# print(test_str.rfind("cd"))#從右往左 // Console.WriteLine(test_str.LastIndexOf("cd"));//11 // //# print(test_str.find("dnt"))#find和rfind找不到就返回-1 // Console.WriteLine(test_str.IndexOf("dnt"));//-1 // //# # index和rindex用法和find同樣,只是找不到會報錯(之後用find系便可) // //# print(test_str.index("dnt")) // //# # ------------------------------------------------------------- // //# # 計數:count // //# # xxx.count(str, start, end) // // print(test_str.count("d"))#4 // // print(test_str.count("cd"))#2 // // 第一反應,字典、正則、linq,後來想怎麼用基礎知識解決,因而有了這個~(原字符串長度-替換後的長度)/字符串長度 // System.Console.WriteLine(test_str.Length-test_str.Replace("d","").Length);//統計單個字符就簡單了 // System.Console.WriteLine((test_str.Length-test_str.Replace("cd","").Length)/"cd".Length); // System.Console.WriteLine(test_str);//不用擔憂原字符串改變(python和C#都是有字符串不可變性的) // //# # ------------------------------------------------------------- // // // //# # 替換:replace // //# # xxx.replace(str1, str2, count_num) // //# print(test_str) // //# print(test_str.replace("b","B"))#並無改變原字符串,只是生成了一個新的字符串 // //# print(test_str) // System.Console.WriteLine(test_str.Replace("b","B")); // //# # replace能夠指定替換幾回 // //# print(test_str.replace("b","B",1))#ABCDaBcdefacddbdf // // 替換指定次數的功能有點業餘,就不說了 // //# # ------------------------------------------------------------- // //# 分割:split(按指定字符分割),splitlines(按行分割),partition(以str分割成三部分,str前,str和str後),rpartition // //# test_list=test_str.split("a")#a有兩個,按照a分割,那麼會分紅三段,返回類型是列表(List),而且返回結果中沒有a // //# print(test_list) // var test_array = test_str.Split('a');//返回數組(若是要返回列表==》test_str.Split('a').ToList();) // var test_input = "hi my name is dnt"; // //# print(test_input.split(" ")) #返回列表格式(後面會說)['hi', 'my', 'name', 'is', 'dnt'] // test_input.Split(" "); // //# print(test_input.split(" ",3))#在第三個空格處切片,後面的無論了 // //# # 按行分割,返回類型爲List // var test_line_str = "abc\nbca\ncab\n"; // //# print(test_line_str.splitlines())#['abc', 'bca', 'cab'] // test_line_str.Split("\n", StringSplitOptions.RemoveEmptyEntries); // //# print(test_line_str.split("\n"))#看出區別了吧:['abc', 'bca', 'cab', ''] // // // //# # # 沒看出來就再來個案例 // //# test_line_str2="abc\nbca\ncab\nLLL" // //# print(test_line_str2.splitlines())#['abc', 'bca', 'cab', 'LLL'] // //# print(test_line_str2.split("\n"))#再提示一下,最後不是\n就和上面同樣效果 // // // //# # 擴展: // //# print("hi my name is dnt\t\n m\n\t\n".split())#split(),默認按空字符切割(空格、\t、\n等等,不用擔憂返回'') // // // //# #partition,返回是元祖類型(後面會說的),方式和find同樣,找到第一個匹配的就罷工了 // //# print(test_str.partition("cd"))#('ABCDab', 'cd', 'efacddbdf') // //# print(test_str.rpartition("cd"))#('ABCDabcdefa', 'cd', 'dbdf') // //# print(test_str.partition("感受本身萌萌噠"))#沒找到:('ABCDabcdefacddbdf', '', '') // // // //# # ------------------------------------------------------------- // //# 鏈接:join // //# separat.join(xxx) // //# 錯誤用法:xxx.join("-") // //# print("-".join(test_list)) // System.Console.WriteLine(string.Join("-",test_array));//test_array是數組 ABCD-bcdef-cddbdf //# # ------------------------------------------------------------- // // //# # 頭尾判斷:startswith(以。。。開頭),endswith(以。。。結尾) // //# # test_str.startswith(以。。。開頭) // var start_end_str="http://www.baidu.net"; // //# print(start_end_str.startswith("https://") or start_end_str.startswith("http://")) // System.Console.WriteLine(start_end_str.StartsWith("https://")||start_end_str.StartsWith("http://")); // //# print(start_end_str.endswith(".com")) // System.Console.WriteLine(start_end_str.EndsWith(".com")); // //# # ------------------------------------------------------------- // // // //# # 大小寫系:lower(字符串轉換爲小寫),upper(字符串轉換爲大寫),title(單詞首字母大寫),capitalize(第一個字符大寫,其餘變小寫) // //# print(test_str) // //# print(test_str.upper())#ABCDABCDEFACDDBDF // System.Console.WriteLine(test_str.ToUpper()); // //# print(test_str.lower())#abcdabcdefacddbdf // System.Console.WriteLine(test_str.ToLower()); // //# print(test_str.capitalize())#第一個字符大寫,其餘變小寫 // // // //# # ------------------------------------------------------------- // // // //# # 格式系列:lstrip(去除左邊空格),rstrip(去除右邊空格),strip(去除兩邊空格),ljust,rjust,center // var strip_str=" I Have a Dream "; // //# print(strip_str.strip()+"|")#我加 | 是爲了看清後面空格,沒有別的用處 // System.Console.WriteLine(strip_str.Trim()+"|"); // //# print(strip_str.lstrip()+"|") // System.Console.WriteLine(strip_str.TrimStart()+"|"); // //# print(strip_str.rstrip()+"|") // System.Console.WriteLine(strip_str.TrimEnd()+"|"); //# #這個就是格式化輸出,就不講了 //# print(test_str.ljust(50)) //# print(test_str.rjust(50)) //# print(test_str.center(50)) //# # ------------------------------------------------------------- // // //# 驗證系列:isalpha(是不是純字母),isalnum(是不是數字|字母),isdigit(是不是純數字),isspace(是不是純空格) // // // //# test_str2="Abcd123" // //# test_str3="123456" // var test_str4=" \t"; // var test_str5=" \t \n "; //#isspace() ==>true // // string.IsNullOrEmpty 和 string.IsNullOrWhiteSpace 是系統自帶的,其餘的你須要本身封裝一個擴展類 // System.Console.WriteLine(string.IsNullOrEmpty(test_str4)); //false // System.Console.WriteLine(string.IsNullOrWhiteSpace(test_str4));//true // System.Console.WriteLine(string.IsNullOrEmpty(test_str5));//false // System.Console.WriteLine(string.IsNullOrWhiteSpace(test_str5));//true // //# 一張圖搞定,其餘的本身去試一試吧 // //# test_str.isalpha() // //# test_str.isalnum() // //# test_str.isdigit() // //# test_str.isspace() #endregion // Console.Read(); } } }簡單封裝:
View Codeusing System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; public static partial class ValidationHelper { #region 經常使用驗證 #region 集合系列 /// <summary> /// 判斷集合是否有數據 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <returns></returns> public static bool ExistsData<T>(this IEnumerable<T> list) { bool b = false; if (list != null && list.Count() > 0) { b = true; } return b; } #endregion #region Null判斷系列 /// <summary> /// 判斷是否爲空或Null /// </summary> /// <param name="objStr"></param> /// <returns></returns> public static bool IsNullOrWhiteSpace(this string objStr) { if (string.IsNullOrWhiteSpace(objStr)) { return true; } else { return false; } } /// <summary> /// 判斷類型是否爲可空類型 /// </summary> /// <param name="theType"></param> /// <returns></returns> public static bool IsNullableType(Type theType) { return (theType.IsGenericType && theType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))); } #endregion #region 數字字符串檢查 /// <summary> /// 是否數字字符串(包括小數) /// </summary> /// <param name="objStr">輸入字符串</param> /// <returns></returns> public static bool IsNumber(this string objStr) { try { return Regex.IsMatch(objStr, @"^\d+(\.\d+)?$"); } catch { return false; } } /// <summary> /// 是不是浮點數 /// </summary> /// <param name="objStr">輸入字符串</param> /// <returns></returns> public static bool IsDecimal(this string objStr) { try { return Regex.IsMatch(objStr, @"^(-?\d+)(\.\d+)?$"); } catch { return false; } } #endregion #endregion #region 業務經常使用 #region 中文檢測 /// <summary> /// 檢測是否有中文字符 /// </summary> /// <param name="objStr"></param> /// <returns></returns> public static bool IsZhCN(this string objStr) { try { return Regex.IsMatch(objStr, "[\u4e00-\u9fa5]"); } catch { return false; } } #endregion #region 郵箱驗證 /// <summary> /// 判斷郵箱地址是否正確 /// </summary> /// <param name="objStr"></param> /// <returns></returns> public static bool IsEmail(this string objStr) { try { return Regex.IsMatch(objStr, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); } catch { return false; } } #endregion #region IP系列驗證 /// <summary> /// 是否爲ip /// </summary> /// <param name="objStr"></param> /// <returns></returns> public static bool IsIP(this string objStr) { return Regex.IsMatch(objStr, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"); } /// <summary> /// 判斷輸入的字符串是不是表示一個IP地址 /// </summary> /// <param name="objStr">被比較的字符串</param> /// <returns>是IP地址則爲True</returns> public static bool IsIPv4(this string objStr) { string[] IPs = objStr.Split('.'); for (int i = 0; i < IPs.Length; i++) { if (!Regex.IsMatch(IPs[i], @"^\d+$")) { return false; } if (Convert.ToUInt16(IPs[i]) > 255) { return false; } } return true; } /// <summary> /// 判斷輸入的字符串是不是合法的IPV6 地址 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsIPV6(string input) { string temp = input; string[] strs = temp.Split(':'); if (strs.Length > 8) { return false; } int count = input.GetStrCount("::"); if (count > 1) { return false; } else if (count == 0) { return Regex.IsMatch(input, @"^([\da-f]{1,4}:){7}[\da-f]{1,4}$"); } else { return Regex.IsMatch(input, @"^([\da-f]{1,4}:){0,5}::([\da-f]{1,4}:){0,5}[\da-f]{1,4}$"); } } #endregion #region 網址系列驗證 /// <summary> /// 驗證網址是否正確(http:或者https:)【後期添加 // 的狀況】 /// </summary> /// <param name="objStr">地址</param> /// <returns></returns> public static bool IsWebUrl(this string objStr) { try { return Regex.IsMatch(objStr, @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?|https://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"); } catch { return false; } } /// <summary> /// 判斷輸入的字符串是不是一個超連接 /// </summary> /// <param name="objStr"></param> /// <returns></returns> public static bool IsURL(this string objStr) { string pattern = @"^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"; return Regex.IsMatch(objStr, pattern); } #endregion #region 郵政編碼驗證 /// <summary> /// 驗證郵政編碼是否正確 /// </summary> /// <param name="objStr">輸入字符串</param> /// <returns></returns> public static bool IsZipCode(this string objStr) { try { return Regex.IsMatch(objStr, @"\d{6}"); } catch { return false; } } #endregion #region 電話+手機驗證 /// <summary> /// 驗證手機號是否正確 /// </summary> /// <param name="objStr">手機號</param> /// <returns></returns> public static bool IsMobile(this string objStr) { try { return Regex.IsMatch(objStr, @"^13[0-9]{9}|15[012356789][0-9]{8}|18[0123456789][0-9]{8}|147[0-9]{8}$"); } catch { return false; } } /// <summary> /// 匹配3位或4位區號的電話號碼,其中區號能夠用小括號括起來,也能夠不用,區號與本地號間能夠用連字號或空格間隔,也能夠沒有間隔 /// </summary> /// <param name="objStr"></param> /// <returns></returns> public static bool IsPhone(this string objStr) { try { return Regex.IsMatch(objStr, "^\\(0\\d{2}\\)[- ]?\\d{8}$|^0\\d{2}[- ]?\\d{8}$|^\\(0\\d{3}\\)[- ]?\\d{7}$|^0\\d{3}[- ]?\\d{7}$"); } catch { return false; } } #endregion #region 字母或數字驗證 /// <summary> /// 是否只是字母或數字 /// </summary> /// <param name="objStr"></param> /// <returns></returns> public static bool IsAbcOr123(this string objStr) { try { return Regex.IsMatch(objStr, @"^[0-9a-zA-Z\$]+$"); } catch { return false; } } #endregion #endregion }
說這麼多基本上差很少完了,下次列表+字典+元組就一塊兒講了啊~