ClsRegex.cs 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Text.RegularExpressions;
  7. namespace BaseLibRWFile
  8. {
  9. /// <summary>
  10. /// 正则表达式
  11. /// </summary>
  12. public class ClsRegex
  13. {
  14. private static readonly Regex RegNumber = new Regex("^[0-9]+$");
  15. private static readonly Regex RegNumberSign = new Regex("^[+-]?[0-9]+$");
  16. private static readonly Regex RegDecimal = new Regex("^[0-9]+[.]?[0-9]+$");
  17. private static readonly Regex RegDecimalSign = new Regex("^[+-]?[0-9]+[.]?[0-9]+$"); //等价于^[+-]?\d+[.]?\d+$
  18. private static readonly Regex RegEmail = new Regex(@"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$");//w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
  19. private static readonly Regex RegCHZN = new Regex("[\u4e00-\u9fa5]");
  20. #region 用户名密码格式
  21. /// <summary>
  22. /// 返回字符串真实长度, 1个汉字长度为2
  23. /// </summary>
  24. /// <returns>字符长度</returns>
  25. public static int GetStringLength(string stringValue)
  26. {
  27. return Encoding.Default.GetBytes(stringValue).Length;
  28. }
  29. /// <summary>
  30. /// 检测用户名格式是否有效
  31. /// </summary>
  32. /// <param name="userName"></param>
  33. /// <returns></returns>
  34. public static bool IsValidUserName(string userName)
  35. {
  36. int userNameLength = GetStringLength(userName);
  37. if (userNameLength >= 4 && userNameLength <= 20 && Regex.IsMatch(userName, @"^([\u4e00-\u9fa5A-Za-z_0-9]{0,})$"))
  38. { // 判断用户名的长度(4-20个字符)及内容(只能是汉字、字母、下划线、数字)是否合法
  39. return true;
  40. }
  41. else
  42. {
  43. return false;
  44. }
  45. }
  46. /// <summary>
  47. /// 密码有效性
  48. /// </summary>
  49. /// <param name="password"></param>
  50. /// <returns></returns>
  51. public static bool IsValidPassword(string password)
  52. {
  53. return Regex.IsMatch(password, @"^[A-Za-z_0-9]{6,16}$");
  54. }
  55. #endregion
  56. #region 数字字符串检查
  57. /// <summary>
  58. /// int有效性
  59. /// </summary>
  60. /// <param name="val"></param>
  61. /// <returns></returns>
  62. public static bool IsValidInt(string val)
  63. {
  64. return Regex.IsMatch(val, @"^[1-9]\d*\.?[0]*$");
  65. }
  66. /// <summary>
  67. /// 是否数字字符串
  68. /// </summary>
  69. /// <param name="inputData">输入字符串</param>
  70. /// <returns></returns>
  71. public static bool IsNumber(string inputData)
  72. {
  73. Match m = RegNumber.Match(inputData);
  74. return m.Success;
  75. }
  76. /// <summary>
  77. /// 是否数字字符串 可带正负号
  78. /// </summary>
  79. /// <param name="inputData">输入字符串</param>
  80. /// <returns></returns>
  81. public static bool IsNumberSign(string inputData)
  82. {
  83. Match m = RegNumberSign.Match(inputData);
  84. return m.Success;
  85. }
  86. /// <summary>
  87. /// 是否是浮点数
  88. /// </summary>
  89. /// <param name="inputData">输入字符串</param>
  90. /// <returns></returns>
  91. public static bool IsDecimal(string inputData)
  92. {
  93. Match m = RegDecimal.Match(inputData);
  94. return m.Success;
  95. }
  96. /// <summary>
  97. /// 是否是浮点数 可带正负号
  98. /// </summary>
  99. /// <param name="inputData">输入字符串</param>
  100. /// <returns></returns>
  101. public static bool IsDecimalSign(string inputData)
  102. {
  103. Match m = RegDecimalSign.Match(inputData);
  104. return m.Success;
  105. }
  106. #endregion
  107. #region 中文检测
  108. /// <summary>
  109. /// 检测是否有中文字符
  110. /// </summary>
  111. /// <param name="inputData"></param>
  112. /// <returns></returns>
  113. public static bool IsHasCHZN(string inputData)
  114. {
  115. Match m = RegCHZN.Match(inputData);
  116. return m.Success;
  117. }
  118. /// <summary>
  119. /// 检测含有中文字符串的实际长度
  120. /// </summary>
  121. /// <param name="str">字符串</param>
  122. public static int GetCHZNLength(string inputData)
  123. {
  124. System.Text.ASCIIEncoding n = new System.Text.ASCIIEncoding();
  125. byte[] bytes = n.GetBytes(inputData);
  126. int length = 0; // l 为字符串之实际长度
  127. for (int i = 0; i <= bytes.Length - 1; i++)
  128. {
  129. if (bytes[i] == 63) //判断是否为汉字或全脚符号
  130. {
  131. length++;
  132. }
  133. length++;
  134. }
  135. return length;
  136. }
  137. #endregion
  138. #region 常用格式
  139. /// <summary>
  140. /// 验证身份证是否合法 15 和 18位两种
  141. /// </summary>
  142. /// <param name="idCard">要验证的身份证</param>
  143. public static bool IsIdCard(string idCard)
  144. {
  145. if (string.IsNullOrEmpty(idCard))
  146. {
  147. return false;
  148. }
  149. if (idCard.Length == 15)
  150. {
  151. return Regex.IsMatch(idCard, @"^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$");
  152. }
  153. else if (idCard.Length == 18)
  154. {
  155. return Regex.IsMatch(idCard, @"^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[A-Z])$", RegexOptions.IgnoreCase);
  156. }
  157. else
  158. {
  159. return false;
  160. }
  161. }
  162. /// <summary>
  163. /// 是否是邮件地址
  164. /// </summary>
  165. /// <param name="inputData">输入字符串</param>
  166. /// <returns></returns>
  167. public static bool IsEmail(string inputData)
  168. {
  169. Match m = RegEmail.Match(inputData);
  170. return m.Success;
  171. }
  172. /// <summary>
  173. /// 邮编有效性
  174. /// </summary>
  175. /// <param name="zip"></param>
  176. /// <returns></returns>
  177. public static bool IsValidZip(string zip)
  178. {
  179. Regex rx = new Regex(@"^\d{6}$", RegexOptions.None);
  180. Match m = rx.Match(zip);
  181. return m.Success;
  182. }
  183. /// <summary>
  184. /// 固定电话有效性
  185. /// </summary>
  186. /// <param name="phone"></param>
  187. /// <returns></returns>
  188. public static bool IsValidPhone(string phone)
  189. {
  190. Regex rx = new Regex(@"^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$", RegexOptions.None);
  191. Match m = rx.Match(phone);
  192. return m.Success;
  193. }
  194. /// <summary>
  195. /// 手机有效性
  196. /// </summary>
  197. /// <param name="strMobile"></param>
  198. /// <returns></returns>
  199. public static bool IsValidMobile(string mobile)
  200. {
  201. Regex rx = new Regex(@"^(13|15)\d{9}$", RegexOptions.None);
  202. Match m = rx.Match(mobile);
  203. return m.Success;
  204. }
  205. /// <summary>
  206. /// 电话有效性(固话和手机 )
  207. /// </summary>
  208. /// <param name="strVla"></param>
  209. /// <returns></returns>
  210. public static bool IsValidPhoneAndMobile(string number)
  211. {
  212. Regex rx = new Regex(@"^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$|^(13|15)\d{9}$", RegexOptions.None);
  213. Match m = rx.Match(number);
  214. return m.Success;
  215. }
  216. /// <summary>
  217. /// Url有效性
  218. /// </summary>
  219. /// <param name="url"></param>
  220. /// <returns></returns>
  221. static public bool IsValidURL(string url)
  222. {
  223. return Regex.IsMatch(url, @"^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$");
  224. }
  225. /// <summary>
  226. /// IP有效性
  227. /// </summary>
  228. /// <param name="ip"></param>
  229. /// <returns></returns>
  230. public static bool IsValidIP(string ip)
  231. {
  232. return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
  233. }
  234. /// <summary>
  235. /// domain 有效性
  236. /// </summary>
  237. /// <param name="host">域名</param>
  238. /// <returns></returns>
  239. public static bool IsValidDomain(string host)
  240. {
  241. Regex r = new Regex(@"^\d+$");
  242. if (host.IndexOf(".") == -1)
  243. {
  244. return false;
  245. }
  246. return r.IsMatch(host.Replace(".", string.Empty)) ? false : true;
  247. }
  248. /// <summary>
  249. /// 判断是否为base64字符串
  250. /// </summary>
  251. /// <param name="str"></param>
  252. /// <returns></returns>
  253. public static bool IsBase64String(string str)
  254. {
  255. return Regex.IsMatch(str, @"[A-Za-z0-9\+\/\=]");
  256. }
  257. /// <summary>
  258. /// 验证字符串是否是GUID
  259. /// </summary>
  260. /// <param name="guid">字符串</param>
  261. /// <returns></returns>
  262. public static bool IsGuid(string guid)
  263. {
  264. if (string.IsNullOrEmpty(guid))
  265. return false;
  266. return Regex.IsMatch(guid, "[A-F0-9]{8}(-[A-F0-9]{4}){3}-[A-F0-9]{12}|[A-F0-9]{32}", RegexOptions.IgnoreCase);
  267. }
  268. #endregion
  269. #region 日期检查
  270. /// <summary>
  271. /// 判断输入的字符是否为日期
  272. /// </summary>
  273. /// <param name="strValue"></param>
  274. /// <returns></returns>
  275. public static bool IsDate(string strValue)
  276. {
  277. return Regex.IsMatch(strValue, @"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))");
  278. }
  279. /// <summary>
  280. /// 判断输入的字符是否为日期,如2004-07-12 14:25|||1900-01-01 00:00|||9999-12-31 23:59
  281. /// </summary>
  282. /// <param name="strValue"></param>
  283. /// <returns></returns>
  284. public static bool IsDateHourMinute(string strValue)
  285. {
  286. return Regex.IsMatch(strValue, @"^(19[0-9]{2}|[2-9][0-9]{3})-((0(1|3|5|7|8)|10|12)-(0[1-9]|1[0-9]|2[0-9]|3[0-1])|(0(4|6|9)|11)-(0[1-9]|1[0-9]|2[0-9]|30)|(02)-(0[1-9]|1[0-9]|2[0-9]))\x20(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){1}$");
  287. }
  288. #endregion
  289. #region 其他
  290. /// <summary>
  291. /// 检查字符串最大长度,返回指定长度的串
  292. /// </summary>
  293. /// <param name="sqlInput">输入字符串</param>
  294. /// <param name="maxLength">最大长度</param>
  295. /// <returns></returns>
  296. public static string CheckMathLength(string inputData, int maxLength)
  297. {
  298. if (inputData != null && inputData != string.Empty)
  299. {
  300. inputData = inputData.Trim();
  301. if (inputData.Length > maxLength)//按最大长度截取字符串
  302. {
  303. inputData = inputData.Substring(0, maxLength);
  304. }
  305. }
  306. return inputData;
  307. }
  308. /// <summary>
  309. /// 转换成 HTML code
  310. /// </summary>
  311. /// <param name="str">string</param>
  312. /// <returns>string</returns>
  313. public static string Encode(string str)
  314. {
  315. str = str.Replace("&", "&amp;");
  316. str = str.Replace("'", "''");
  317. str = str.Replace("\"", "&quot;");
  318. str = str.Replace(" ", "&nbsp;");
  319. str = str.Replace("<", "&lt;");
  320. str = str.Replace(">", "&gt;");
  321. str = str.Replace("\n", "<br>");
  322. return str;
  323. }
  324. /// <summary>
  325. ///解析html成 普通文本
  326. /// </summary>
  327. /// <param name="str">string</param>
  328. /// <returns>string</returns>
  329. public static string Decode(string str)
  330. {
  331. str = str.Replace("<br>", "\n");
  332. str = str.Replace("&gt;", ">");
  333. str = str.Replace("&lt;", "<");
  334. str = str.Replace("&nbsp;", " ");
  335. str = str.Replace("&quot;", "\"");
  336. return str;
  337. }
  338. #endregion
  339. #region 匹配方法
  340. /// <summary>
  341. /// 验证字符串是否匹配正则表达式描述的规则
  342. /// </summary>
  343. /// <param name="inputStr">待验证的字符串</param>
  344. /// <param name="patternStr">正则表达式字符串</param>
  345. /// <returns>是否匹配</returns>
  346. public static bool IsMatch(string inputStr, string patternStr)
  347. {
  348. return IsMatch(inputStr, patternStr, false, false);
  349. }
  350. /// <summary>
  351. /// 验证字符串是否匹配正则表达式描述的规则
  352. /// </summary>
  353. /// <param name="inputStr">待验证的字符串</param>
  354. /// <param name="patternStr">正则表达式字符串</param>
  355. /// <param name="ifIgnoreCase">匹配时是否不区分大小写</param>
  356. /// <returns>是否匹配</returns>
  357. public static bool IsMatch(string inputStr, string patternStr, bool ifIgnoreCase)
  358. {
  359. return IsMatch(inputStr, patternStr, ifIgnoreCase, false);
  360. }
  361. /// <summary>
  362. /// 验证字符串是否匹配正则表达式描述的规则
  363. /// </summary>
  364. /// <param name="inputStr">待验证的字符串</param>
  365. /// <param name="patternStr">正则表达式字符串</param>
  366. /// <param name="ifValidateWhiteSpace">是否验证空白字符串</param>
  367. /// <returns>是否匹配</returns>
  368. //public static bool IsMatch(string inputStr, string patternStr, bool ifValidateWhiteSpace)
  369. //{
  370. // return IsMatch(inputStr, patternStr, false, ifValidateWhiteSpace);
  371. //}
  372. /// <summary>
  373. /// 验证字符串是否匹配正则表达式描述的规则
  374. /// </summary>
  375. /// <param name="inputStr">待验证的字符串</param>
  376. /// <param name="patternStr">正则表达式字符串</param>
  377. /// <param name="ifIgnoreCase">匹配时是否不区分大小写</param>
  378. /// <param name="ifValidateWhiteSpace">是否验证空白字符串</param>
  379. /// <returns>是否匹配</returns>
  380. public static bool IsMatch(string inputStr, string patternStr, bool ifIgnoreCase, bool ifValidateWhiteSpace)
  381. {
  382. if (!ifValidateWhiteSpace && string.IsNullOrWhiteSpace(inputStr))//.NET 4.0 新增IsNullOrWhiteSpace 方法,便于对用户做处理
  383. return false;//如果不要求验证空白字符串而此时传入的待验证字符串为空白字符串,则不匹配
  384. Regex regex = null;
  385. if (ifIgnoreCase)
  386. regex = new Regex(patternStr, RegexOptions.IgnoreCase);//指定不区分大小写的匹配
  387. else
  388. regex = new Regex(patternStr);
  389. return regex.IsMatch(inputStr);
  390. }
  391. #endregion
  392. #region 验证方法
  393. /// <summary>
  394. /// 验证数字(double类型)
  395. /// [可以包含负号和小数点]
  396. /// </summary>
  397. /// <param name="input">待验证的字符串</param>
  398. /// <returns>是否匹配</returns>
  399. public static bool IsNumber1(string input)
  400. {
  401. //string pattern = @"^-?\d+$|^(-?\d+)(\.\d+)?$";
  402. //return IsMatch(input, pattern);
  403. double d = 0;
  404. if (double.TryParse(input, out d))
  405. return true;
  406. else
  407. return false;
  408. }
  409. /// <summary>
  410. /// 验证整数
  411. /// </summary>
  412. /// <param name="input">待验证的字符串</param>
  413. /// <returns>是否匹配</returns>
  414. public static bool IsInteger(string input)
  415. {
  416. //string pattern = @"^-?\d+$";
  417. //return IsMatch(input, pattern);
  418. int i = 0;
  419. if (int.TryParse(input, out i))
  420. return true;
  421. else
  422. return false;
  423. }
  424. /// <summary>
  425. /// 验证非负整数
  426. /// </summary>
  427. /// <param name="input">待验证的字符串</param>
  428. /// <returns>是否匹配</returns>
  429. public static bool IsIntegerNotNagtive(string input)
  430. {
  431. //string pattern = @"^\d+$";
  432. //return IsMatch(input, pattern);
  433. int i = -1;
  434. if (int.TryParse(input, out i) && i >= 0)
  435. return true;
  436. else
  437. return false;
  438. }
  439. /// <summary>
  440. /// 验证正整数
  441. /// </summary>
  442. /// <param name="input">待验证的字符串</param>
  443. /// <returns>是否匹配</returns>
  444. public static bool IsIntegerPositive(string input)
  445. {
  446. //string pattern = @"^[0-9]*[1-9][0-9]*$";
  447. //return IsMatch(input, pattern);
  448. int i = 0;
  449. if (int.TryParse(input, out i) && i >= 1)
  450. return true;
  451. else
  452. return false;
  453. }
  454. /// <summary>
  455. /// 验证小数
  456. /// </summary>
  457. /// <param name="input">待验证的字符串</param>
  458. /// <returns>是否匹配</returns>
  459. public static bool IsDecimal1(string input)
  460. {
  461. string pattern = @"^([-+]?[1-9]\d*\.\d+|-?0\.\d*[1-9]\d*)$";
  462. return IsMatch(input, pattern);
  463. }
  464. /// <summary>
  465. /// 验证只包含英文字母
  466. /// </summary>
  467. /// <param name="input">待验证的字符串</param>
  468. /// <returns>是否匹配</returns>
  469. public static bool IsEnglishCharacter(string input)
  470. {
  471. string pattern = @"^[A-Za-z]+$";
  472. return IsMatch(input, pattern);
  473. }
  474. /// <summary>
  475. /// 验证只包含数字和英文字母
  476. /// </summary>
  477. /// <param name="input">待验证的字符串</param>
  478. /// <returns>是否匹配</returns>
  479. public static bool IsIntegerAndEnglishCharacter(string input)
  480. {
  481. string pattern = @"^[0-9A-Za-z]+$";
  482. return IsMatch(input, pattern);
  483. }
  484. /// <summary>
  485. /// 验证只包含汉字
  486. /// </summary>
  487. /// <param name="input">待验证的字符串</param>
  488. /// <returns>是否匹配</returns>
  489. public static bool IsChineseCharacter(string input)
  490. {
  491. string pattern = @"^[\u4e00-\u9fa5]+$";
  492. return IsMatch(input, pattern);
  493. }
  494. /// <summary>
  495. /// 验证数字长度范围(数字前端的0计长度)
  496. /// [若要验证固定长度,可传入相同的两个长度数值]
  497. /// </summary>
  498. /// <param name="input">待验证的字符串</param>
  499. /// <param name="lengthBegin">长度范围起始值(含)</param>
  500. /// <param name="lengthEnd">长度范围结束值(含)</param>
  501. /// <returns>是否匹配</returns>
  502. public static bool IsIntegerLength(string input, int lengthBegin, int lengthEnd)
  503. {
  504. //string pattern = @"^\d{" + lengthBegin + "," + lengthEnd + "}$";
  505. //return IsMatch(input, pattern);
  506. if (input.Length >= lengthBegin && input.Length <= lengthEnd)
  507. {
  508. int i;
  509. if (int.TryParse(input, out i))
  510. return true;
  511. else
  512. return false;
  513. }
  514. else
  515. return false;
  516. }
  517. /// <summary>
  518. /// 验证字符串包含内容
  519. /// </summary>
  520. /// <param name="input">待验证的字符串</param>
  521. /// <param name="withEnglishCharacter">是否包含英文字母</param>
  522. /// <param name="withNumber">是否包含数字</param>
  523. /// <param name="withChineseCharacter">是否包含汉字</param>
  524. /// <returns>是否匹配</returns>
  525. public static bool IsStringInclude(string input, bool withEnglishCharacter, bool withNumber, bool withChineseCharacter)
  526. {
  527. if (!withEnglishCharacter && !withNumber && !withChineseCharacter)
  528. return false;//如果英文字母、数字和汉字都没有,则返回false
  529. StringBuilder patternString = new StringBuilder();
  530. patternString.Append("^[");
  531. if (withEnglishCharacter)
  532. patternString.Append("a-zA-Z");
  533. if (withNumber)
  534. patternString.Append("0-9");
  535. if (withChineseCharacter)
  536. patternString.Append(@"\u4E00-\u9FA5");
  537. patternString.Append("]+$");
  538. return IsMatch(input, patternString.ToString());
  539. }
  540. /// <summary>
  541. /// 验证字符串长度范围
  542. /// [若要验证固定长度,可传入相同的两个长度数值]
  543. /// </summary>
  544. /// <param name="input">待验证的字符串</param>
  545. /// <param name="lengthBegin">长度范围起始值(含)</param>
  546. /// <param name="lengthEnd">长度范围结束值(含)</param>
  547. /// <returns>是否匹配</returns>
  548. public static bool IsStringLength(string input, int lengthBegin, int lengthEnd)
  549. {
  550. //string pattern = @"^.{" + lengthBegin + "," + lengthEnd + "}$";
  551. //return IsMatch(input, pattern);
  552. if (input.Length >= lengthBegin && input.Length <= lengthEnd)
  553. return true;
  554. else
  555. return false;
  556. }
  557. /// <summary>
  558. /// 验证字符串长度范围(字符串内只包含数字和/或英文字母)
  559. /// [若要验证固定长度,可传入相同的两个长度数值]
  560. /// </summary>
  561. /// <param name="input">待验证的字符串</param>
  562. /// <param name="lengthBegin">长度范围起始值(含)</param>
  563. /// <param name="lengthEnd">长度范围结束值(含)</param>
  564. /// <returns>是否匹配</returns>
  565. public static bool IsStringLengthOnlyNumberAndEnglishCharacter(string input, int lengthBegin, int lengthEnd)
  566. {
  567. string pattern = @"^[0-9a-zA-z]{" + lengthBegin + "," + lengthEnd + "}$";
  568. return IsMatch(input, pattern);
  569. }
  570. /// <summary>
  571. /// 验证字符串长度范围
  572. /// [若要验证固定长度,可传入相同的两个长度数值]
  573. /// </summary>
  574. /// <param name="input">待验证的字符串</param>
  575. /// <param name="withEnglishCharacter">是否包含英文字母</param>
  576. /// <param name="withNumber">是否包含数字</param>
  577. /// <param name="withChineseCharacter">是否包含汉字</param>
  578. /// <param name="lengthBegin">长度范围起始值(含)</param>
  579. /// <param name="lengthEnd">长度范围结束值(含)</param>
  580. /// <returns>是否匹配</returns>
  581. public static bool IsStringLengthByInclude(string input, bool withEnglishCharacter, bool withNumber, bool withChineseCharacter, int lengthBegin, int lengthEnd)
  582. {
  583. if (!withEnglishCharacter && !withNumber && !withChineseCharacter)
  584. return false;//如果英文字母、数字和汉字都没有,则返回false
  585. StringBuilder patternString = new StringBuilder();
  586. patternString.Append("^[");
  587. if (withEnglishCharacter)
  588. patternString.Append("a-zA-Z");
  589. if (withNumber)
  590. patternString.Append("0-9");
  591. if (withChineseCharacter)
  592. patternString.Append(@"\u4E00-\u9FA5");
  593. patternString.Append("]{" + lengthBegin + "," + lengthEnd + "}$");
  594. return IsMatch(input, patternString.ToString());
  595. }
  596. /// <summary>
  597. /// 验证字符串字节数长度范围
  598. /// [若要验证固定长度,可传入相同的两个长度数值;每个汉字为两个字节长度]
  599. /// </summary>
  600. /// <param name="input">待验证的字符串</param>
  601. /// <param name="lengthBegin">长度范围起始值(含)</param>
  602. /// <param name="lengthEnd">长度范围结束值(含)</param>
  603. /// <returns></returns>
  604. public static bool IsStringByteLength(string input, int lengthBegin, int lengthEnd)
  605. {
  606. //int byteLength = Regex.Replace(input, @"[^\x00-\xff]", "ok").Length;
  607. //if (byteLength >= lengthBegin && byteLength <= lengthEnd)
  608. //{
  609. // return true;
  610. //}
  611. //return false;
  612. int byteLength = Encoding.Default.GetByteCount(input);
  613. if (byteLength >= lengthBegin && byteLength <= lengthEnd)
  614. return true;
  615. else
  616. return false;
  617. }
  618. /// <summary>
  619. /// 验证日期
  620. /// </summary>
  621. /// <param name="input">待验证的字符串</param>
  622. /// <returns>是否匹配</returns>
  623. public static bool IsDateTime(string input)
  624. {
  625. if (DateTime.TryParse(input, out DateTime dt))
  626. return true;
  627. else
  628. return false;
  629. }
  630. /// <summary>
  631. /// 验证固定电话号码
  632. /// [3位或4位区号;区号可以用小括号括起来;区号可以省略;区号与本地号间可以用减号或空格隔开;可以有3位数的分机号,分机号前要加减号]
  633. /// </summary>
  634. /// <param name="input">待验证的字符串</param>
  635. /// <returns>是否匹配</returns>
  636. public static bool IsTelePhoneNumber(string input)
  637. {
  638. string pattern = @"^(((0\d2|0\d{2})[- ]?)?\d{8}|((0\d3|0\d{3})[- ]?)?\d{7})(-\d{3})?$";
  639. return IsMatch(input, pattern);
  640. }
  641. /// <summary>
  642. /// 验证手机号码
  643. /// [可匹配"(+86)013325656352",括号可以省略,+号可以省略,(+86)可以省略,11位手机号前的0可以省略;11位手机号第二位数可以是3、4、5、8中的任意一个]
  644. /// </summary>
  645. /// <param name="input">待验证的字符串</param>
  646. /// <returns>是否匹配</returns>
  647. public static bool IsMobilePhoneNumber(string input)
  648. {
  649. string pattern = @"^((\+)?86|((\+)?86)?)0?1[3458]\d{9}$";
  650. return IsMatch(input, pattern);
  651. }
  652. /// <summary>
  653. /// 验证电话号码(可以是固定电话号码或手机号码)
  654. /// [固定电话:[3位或4位区号;区号可以用小括号括起来;区号可以省略;区号与本地号间可以用减号或空格隔开;可以有3位数的分机号,分机号前要加减号]]
  655. /// [手机号码:[可匹配"(+86)013325656352",括号可以省略,+号可以省略,(+86)可以省略,手机号前的0可以省略;手机号第二位数可以是3、4、5、8中的任意一个]]
  656. /// </summary>
  657. /// <param name="input">待验证的字符串</param>
  658. /// <returns>是否匹配</returns>
  659. public static bool IsPhoneNumber(string input)
  660. {
  661. string pattern = @"^((\+)?86|((\+)?86)?)0?1[3458]\d{9}$|^(((0\d2|0\d{2})[- ]?)?\d{8}|((0\d3|0\d{3})[- ]?)?\d{7})(-\d{3})?$";
  662. return IsMatch(input, pattern);
  663. }
  664. /// <summary>
  665. /// 验证邮政编码
  666. /// </summary>
  667. /// <param name="input">待验证的字符串</param>
  668. /// <returns>是否匹配</returns>
  669. public static bool IsZipCode(string input)
  670. {
  671. //string pattern = @"^\d{6}$";
  672. //return IsMatch(input, pattern);
  673. if (input.Length != 6)
  674. return false;
  675. int i;
  676. if (int.TryParse(input, out i))
  677. return true;
  678. else
  679. return false;
  680. }
  681. /// <summary>
  682. /// 验证电子邮箱
  683. /// [@字符前可以包含字母、数字、下划线和点号;@字符后可以包含字母、数字、下划线和点号;@字符后至少包含一个点号且点号不能是最后一个字符;最后一个点号后只能是字母或数字]
  684. /// </summary>
  685. /// <param name="input">待验证的字符串</param>
  686. /// <returns>是否匹配</returns>
  687. public static bool IsEmail1(string input)
  688. {
  689. ////邮箱名以数字或字母开头;邮箱名可由字母、数字、点号、减号、下划线组成;邮箱名(@前的字符)长度为3~18个字符;邮箱名不能以点号、减号或下划线结尾;不能出现连续两个或两个以上的点号、减号。
  690. //string pattern = @"^[a-zA-Z0-9]((?<!(\.\.|--))[a-zA-Z0-9\._-]){1,16}[a-zA-Z0-9]@([0-9a-zA-Z][0-9a-zA-Z-]{0,62}\.)+([0-9a-zA-Z][0-9a-zA-Z-]{0,62})\.?|((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$";
  691. string pattern = @"^([\w-\.]+)@([\w-\.]+)(\.[a-zA-Z0-9]+)$";
  692. return IsMatch(input, pattern);
  693. }
  694. /// <summary>
  695. /// 验证网址(可以匹配IPv4地址但没对IPv4地址进行格式验证;IPv6暂时没做匹配)
  696. /// [允许省略"://";可以添加端口号;允许层级;允许传参;域名中至少一个点号且此点号前要有内容]
  697. /// </summary>
  698. /// <param name="input">待验证的字符串</param>
  699. /// <returns>是否匹配</returns>
  700. public static bool IsURL(string input)
  701. {
  702. ////每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,单个域长度不超过63,完整的域名全长不超过256个字符。在DNS系统中,全名是以一个点“.”来结束的,例如“www.nit.edu.cn.”。没有最后的那个点则表示一个相对地址。
  703. ////没有例如"http://"的前缀,没有传参的匹配
  704. //string pattern = @"^([0-9a-zA-Z][0-9a-zA-Z-]{0,62}\.)+([0-9a-zA-Z][0-9a-zA-Z-]{0,62})\.?$";
  705. //string pattern = @"^(((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://)|(www\.))+(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(/[a-zA-Z0-9\&%_\./-~-]*)?$";
  706. string pattern = @"^([a-zA-Z]+://)?([\w-\.]+)(\.[a-zA-Z0-9]+)(:\d{0,5})?/?([\w-/]*)\.?([a-zA-Z]*)\??(([\w-]*=[\w%]*&?)*)$";
  707. return IsMatch(input, pattern);
  708. }
  709. /// <summary>
  710. /// 验证IPv4地址
  711. /// [第一位和最后一位数字不能是0或255;允许用0补位]
  712. /// </summary>
  713. /// <param name="input">待验证的字符串</param>
  714. /// <returns>是否匹配</returns>
  715. public static bool IsIPv4(string input)
  716. {
  717. //string pattern = @"^(25[0-4]|2[0-4]\d]|[01]?\d{2}|[1-9])\.(25[0-5]|2[0-4]\d]|[01]?\d?\d)\.(25[0-5]|2[0-4]\d]|[01]?\d?\d)\.(25[0-4]|2[0-4]\d]|[01]?\d{2}|[1-9])$";
  718. //return IsMatch(input, pattern);
  719. string[] IPs = input.Split('.');
  720. if (IPs.Length != 4)
  721. return false;
  722. int n = -1;
  723. for (int i = 0; i < IPs.Length; i++)
  724. {
  725. if (i == 0 || i == 3)
  726. {
  727. if (int.TryParse(IPs[i], out n) && n > 0 && n < 255)
  728. continue;
  729. else
  730. return false;
  731. }
  732. else
  733. {
  734. if (int.TryParse(IPs[i], out n) && n >= 0 && n <= 255)
  735. continue;
  736. else
  737. return false;
  738. }
  739. }
  740. return true;
  741. }
  742. /// <summary>
  743. /// 验证IPv6地址
  744. /// [可用于匹配任何一个合法的IPv6地址]
  745. /// </summary>
  746. /// <param name="input">待验证的字符串</param>
  747. /// <returns>是否匹配</returns>
  748. public static bool IsIPv6(string input)
  749. {
  750. string pattern = @"^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$";
  751. return IsMatch(input, pattern);
  752. }
  753. /// <summary>
  754. /// 身份证上数字对应的地址
  755. /// </summary>
  756. //enum IDAddress
  757. //{
  758. // 北京 = 11, 天津 = 12, 河北 = 13, 山西 = 14, 内蒙古 = 15, 辽宁 = 21, 吉林 = 22, 黑龙江 = 23, 上海 = 31, 江苏 = 32, 浙江 = 33,
  759. // 安徽 = 34, 福建 = 35, 江西 = 36, 山东 = 37, 河南 = 41, 湖北 = 42, 湖南 = 43, 广东 = 44, 广西 = 45, 海南 = 46, 重庆 = 50, 四川 = 51,
  760. // 贵州 = 52, 云南 = 53, 西藏 = 54, 陕西 = 61, 甘肃 = 62, 青海 = 63, 宁夏 = 64, 新疆 = 65, 台湾 = 71, 香港 = 81, 澳门 = 82, 国外 = 91
  761. //}
  762. /// <summary>
  763. /// 验证一代身份证号(15位数)
  764. /// [长度为15位的数字;匹配对应省份地址;生日能正确匹配]
  765. /// </summary>
  766. /// <param name="input">待验证的字符串</param>
  767. /// <returns>是否匹配</returns>
  768. public static bool IsIDCard15(string input)
  769. {
  770. //验证是否可以转换为15位整数
  771. long l = 0;
  772. if (!long.TryParse(input, out l) || l.ToString().Length != 15)
  773. {
  774. return false;
  775. }
  776. //验证省份是否匹配
  777. //1~6位为地区代码,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码。
  778. string address = "11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91,";
  779. if (!address.Contains(input.Remove(2) + ","))
  780. {
  781. return false;
  782. }
  783. //验证生日是否匹配
  784. string birthdate = input.Substring(6, 6).Insert(4, "/").Insert(2, "/");
  785. DateTime dt;
  786. if (!DateTime.TryParse(birthdate, out dt))
  787. {
  788. return false;
  789. }
  790. return true;
  791. }
  792. /// <summary>
  793. /// 验证二代身份证号(18位数,GB11643-1999标准)
  794. /// [长度为18位;前17位为数字,最后一位(校验码)可以为大小写x;匹配对应省份地址;生日能正确匹配;校验码能正确匹配]
  795. /// </summary>
  796. /// <param name="input">待验证的字符串</param>
  797. /// <returns>是否匹配</returns>
  798. public static bool IsIDCard18(string input)
  799. {
  800. //验证是否可以转换为正确的整数
  801. long l = 0;
  802. if (!long.TryParse(input.Remove(17), out l) || l.ToString().Length != 17 || !long.TryParse(input.Replace('x', '0').Replace('X', '0'), out l))
  803. {
  804. return false;
  805. }
  806. //验证省份是否匹配
  807. //1~6位为地区代码,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码。
  808. string address = "11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91,";
  809. if (!address.Contains(input.Remove(2) + ","))
  810. {
  811. return false;
  812. }
  813. //验证生日是否匹配
  814. string birthdate = input.Substring(6, 8).Insert(6, "/").Insert(4, "/");
  815. DateTime dt;
  816. if (!DateTime.TryParse(birthdate, out dt))
  817. {
  818. return false;
  819. }
  820. //校验码验证
  821. //校验码:
  822. //(1)十七位数字本体码加权求和公式
  823. //S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
  824. //Ai:表示第i位置上的身份证号码数字值
  825. //Wi:表示第i位置上的加权因子
  826. //Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  827. //(2)计算模
  828. //Y = mod(S, 11)
  829. //(3)通过模得到对应的校验码
  830. //Y: 0 1 2 3 4 5 6 7 8 9 10
  831. //校验码: 1 0 X 9 8 7 6 5 4 3 2
  832. string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
  833. string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
  834. char[] Ai = input.Remove(17).ToCharArray();
  835. int sum = 0;
  836. for (int i = 0; i < 17; i++)
  837. {
  838. sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
  839. }
  840. int y = -1;
  841. Math.DivRem(sum, 11, out y);
  842. if (arrVarifyCode[y] != input.Substring(17, 1).ToLower())
  843. {
  844. return false;
  845. }
  846. return true;
  847. }
  848. /// <summary>
  849. /// 验证身份证号(不区分一二代身份证号)
  850. /// </summary>
  851. /// <param name="input">待验证的字符串</param>
  852. /// <returns>是否匹配</returns>
  853. public static bool IsIDCard(string input)
  854. {
  855. if (input.Length == 18)
  856. return IsIDCard18(input);
  857. else if (input.Length == 15)
  858. return IsIDCard15(input);
  859. else
  860. return false;
  861. }
  862. /// <summary>
  863. /// 验证经度
  864. /// </summary>
  865. /// <param name="input">待验证的字符串</param>
  866. /// <returns>是否匹配</returns>
  867. public static bool IsLongitude(string input)
  868. {
  869. ////范围为-180~180,小数位数必须是1到5位
  870. //string pattern = @"^[-\+]?((1[0-7]\d{1}|0?\d{1,2})\.\d{1,5}|180\.0{1,5})$";
  871. //return IsMatch(input, pattern);
  872. float lon;
  873. if (float.TryParse(input, out lon) && lon >= -180 && lon <= 180)
  874. return true;
  875. else
  876. return false;
  877. }
  878. /// <summary>
  879. /// 验证纬度
  880. /// </summary>
  881. /// <param name="input">待验证的字符串</param>
  882. /// <returns>是否匹配</returns>
  883. public static bool IsLatitude(string input)
  884. {
  885. ////范围为-90~90,小数位数必须是1到5位
  886. //string pattern = @"^[-\+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$";
  887. //return IsMatch(input, pattern);
  888. float lat;
  889. if (float.TryParse(input, out lat) && lat >= -90 && lat <= 90)
  890. return true;
  891. else
  892. return false;
  893. }
  894. #endregion
  895. #region 校验数字的表达式
  896. /*
  897. //数字
  898. Regex reg = new Regex(@"^[0-9]*$");
  899. //n位的数字
  900. Regex reg = new Regex(@"^\d{n}$");
  901. //至少n位的数字
  902. Regex reg = new Regex(@"^\d{n,}$");
  903. //m-n位的数字
  904. Regex reg = new Regex(@"^\d{m,n}$");
  905. //零和非零开头的数字
  906. Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");
  907. //非零开头的最多带两位小数的数字
  908. Regex reg = new Regex(@"^([1-9][0-9]*)+(.[0-9]{1,2})?$");
  909. //带1-2位小数的正数或负数
  910. Regex reg = new Regex(@"^(\-)?\d+(\.\d{1,2})?$");
  911. //正数、负数、和小数
  912. Regex reg = new Regex(@"^(\-|\+)?\d+(\.\d+)?$");
  913. //有两位小数的正实数
  914. Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");
  915. //有1~3位小数的正实数
  916. Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,3})?$");
  917. //非零的正整数
  918. Regex reg = new Regex(@"^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$");
  919. //非零的负整数
  920. Regex reg = new Regex(@"^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$");
  921. //非负整数
  922. Regex reg = new Regex(@"^\d+$ 或 ^[1-9]\d*|0$");
  923. //非正整数
  924. Regex reg = new Regex(@"^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$");
  925. //非负浮点数
  926. Regex reg = new Regex(@"^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$");
  927. //非正浮点数
  928. Regex reg = new Regex(@"^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$");
  929. //正浮点数
  930. Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$");
  931. //负浮点数
  932. Regex reg = new Regex(@"^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$");
  933. //浮点数
  934. Regex reg = new Regex(@"^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$");
  935. * */
  936. #endregion
  937. #region 校验字符的表达式
  938. /*
  939. //汉字
  940. Regex reg = new Regex(@"^[\u4e00-\u9fa5]{0,}$");
  941. //英文和数字
  942. Regex reg = new Regex(@"^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$");
  943. //长度为3-20的所有字符
  944. Regex reg = new Regex(@"^.{3,20}$");
  945. //由26个英文字母组成的字符串
  946. Regex reg = new Regex(@"^[A-Za-z]+$");
  947. //由26个大写英文字母组成的字符串
  948. Regex reg = new Regex(@"^[A-Z]+$");
  949. //由26个小写英文字母组成的字符串
  950. Regex reg = new Regex(@"^[a-z]+$");
  951. //由数字和26个英文字母组成的字符串
  952. Regex reg = new Regex(@"^[A-Za-z0-9]+$");
  953. //由数字、26个英文字母或者下划线组成的字符串
  954. Regex reg = new Regex(@"^\w+$ 或 ^\w{3,20}$");
  955. //中文、英文、数字包括下划线
  956. Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9_]+$");
  957. //中文、英文、数字但不包括下划线等符号
  958. Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$");
  959. //可以输入含有^%&’,;=?$\”等字符
  960. Regex reg = new Regex(@"[^%&’,;=?$\x22]+");
  961. //禁止输入含有~的字符
  962. Regex reg = new Regex(@"[^~\x22]+");
  963. * */
  964. #endregion
  965. #region 特殊需求表达式
  966. /*
  967. //Email地址
  968. Regex reg = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
  969. //域名
  970. Regex reg = new Regex(@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?");
  971. //InternetURL
  972. Regex reg = new Regex(@"[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$");
  973. //手机号码
  974. Regex reg = new Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$");
  975. //电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX)
  976. Regex reg = new Regex(@"^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$");
  977. //国内电话号码(0511-4405222、021-87888822)
  978. Regex reg = new Regex(@"\d{3}-\d{8}|\d{4}-\d{7}");
  979. //身份证号(15位、18位数字)
  980. Regex reg = new Regex(@"^\d{15}|\d{18}$");
  981. //短身份证号码(数字、字母x结尾)
  982. Regex reg = new Regex(@"^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$");
  983. //帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
  984. Regex reg = new Regex(@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$");
  985. //密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)
  986. Regex reg = new Regex(@"^[a-zA-Z]\w{5,17}$");
  987. //强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
  988. Regex reg = new Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$");
  989. //日期格式
  990. Regex reg = new Regex(@"^\d{4}-\d{1,2}-\d{1,2}");
  991. //一年的12个月(01~09和1~12)
  992. Regex reg = new Regex(@"^(0?[1-9]|1[0-2])$");
  993. //一个月的31天(01~09和1~31)
  994. Regex reg = new Regex(@"^((0?[1-9])|((1|2)[0-9])|30|31)$");
  995. //钱的输入格式:
  996. //有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”
  997. Regex reg = new Regex(@"^[1-9][0-9]*$");
  998. //这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式
  999. Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");
  1000. //一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号
  1001. Regex reg = new Regex(@"^(0|-?[1-9][0-9]*)$");
  1002. //这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分
  1003. Regex reg = new Regex(@"^[0-9]+(.[0-9]+)?$");
  1004. //必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的
  1005. Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");
  1006. //这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样
  1007. Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,2})?$");
  1008. //这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了,我们可以这样
  1009. Regex reg = new Regex(@"^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$");
  1010. //1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须
  1011. Regex reg = new Regex(@"^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$");
  1012. //备注:这就是最终结果了,别忘了”+”可以用”*”替代。如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
  1013. //xml文件
  1014. Regex reg = new Regex(@"^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$");
  1015. //中文字符的正则表达式
  1016. Regex reg = new Regex(@"[\u4e00-\u9fa5]");
  1017. //双字节字符
  1018. Regex reg = new Regex(@"[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))");
  1019. //空白行的正则表达式,可用来删除空白行
  1020. Regex reg = new Regex(@"\n\s*\r");
  1021. //HTML标记的正则表达式
  1022. Regex reg = new Regex(@"<(\S*?)[^>]*>.*?</\1>|<.*? />");// (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
  1023. //首尾空白字符的正则表达式
  1024. Regex reg = new Regex(@"^\s*|\s*$或(^\s*)|(\s*$)");// (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
  1025. //腾讯QQ号
  1026. Regex reg = new Regex(@"[1-9][0-9]{4,}"); //(腾讯QQ号从10000开始)
  1027. //中国邮政编码
  1028. Regex reg = new Regex(@"[1-9]\d{5}(?!\d)");// (中国邮政编码为6位数字)
  1029. //IP地址
  1030. Regex reg = new Regex(@"\d+\.\d+\.\d+\.\d+");// (提取IP地址时有用)
  1031. //IP地址
  1032. Regex reg = new Regex(@"((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))");
  1033. * */
  1034. #endregion
  1035. }
  1036. }