ValidUtil.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading.Tasks;
  8. using System.Web;
  9. namespace WMS.Util
  10. {
  11. /// <summary>
  12. /// 验证
  13. /// </summary>
  14. public class ValidUtil
  15. {
  16. #region IsEmail(是否邮箱)
  17. /// <summary>
  18. /// 是否邮箱
  19. /// </summary>
  20. /// <param name="value">邮箱地址</param>
  21. /// <param name="isRestrict">是否按严格模式验证</param>
  22. /// <returns></returns>
  23. public static bool IsEmail(string value, bool isRestrict = false)
  24. {
  25. if (string.IsNullOrWhiteSpace(value))
  26. {
  27. return false;
  28. }
  29. string pattern = isRestrict
  30. ? @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$"
  31. : @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$";
  32. return Regex.IsMatch(value, pattern, RegexOptions.IgnoreCase);
  33. }
  34. /// <summary>
  35. /// 是否存在邮箱
  36. /// </summary>
  37. /// <param name="value">值</param>
  38. /// <param name="isRestrict">是否按严格模式验证</param>
  39. /// <returns></returns>
  40. public static bool HasEmail(string value, bool isRestrict = false)
  41. {
  42. if (string.IsNullOrWhiteSpace(value))
  43. {
  44. return false;
  45. }
  46. string pattern = isRestrict
  47. ? @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$"
  48. : @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$";
  49. return Regex.IsMatch(value, pattern, RegexOptions.IgnoreCase);
  50. }
  51. #endregion
  52. #region IsPhoneNumber(是否合法的手机号码)
  53. /// <summary>
  54. /// 是否合法的手机号码
  55. /// </summary>
  56. /// <param name="value">手机号码</param>
  57. /// <returns></returns>
  58. public static bool IsPhoneNumber(string value)
  59. {
  60. if (string.IsNullOrWhiteSpace(value))
  61. {
  62. return false;
  63. }
  64. return Regex.IsMatch(value, @"^(0|86|17951)?(13[0-9]|15[012356789]|18[0-9]|14[57]|17[678])[0-9]{8}$");
  65. }
  66. #endregion
  67. #region IsMobileNumber(是否手机号码)
  68. /// <summary>
  69. /// 是否手机号码
  70. /// </summary>
  71. /// <param name="value">手机号码</param>
  72. /// <param name="isRestrict">是否按严格模式验证</param>
  73. /// <returns></returns>
  74. public static bool IsMobileNumberSimple(string value, bool isRestrict = false)
  75. {
  76. if (string.IsNullOrWhiteSpace(value))
  77. {
  78. return false;
  79. }
  80. string pattern = isRestrict ? @"^[1][3-8]\d{9}$" : @"^[1]\d{10}$";
  81. return Regex.IsMatch(value, pattern);
  82. }
  83. /// <summary>
  84. /// 是否手机号码
  85. /// </summary>
  86. /// <param name="value">手机号码</param>
  87. /// <returns></returns>
  88. public static bool IsMobileNumber(string value)
  89. {
  90. if (string.IsNullOrWhiteSpace(value))
  91. {
  92. return false;
  93. }
  94. value = value.Trim().Replace("^", "").Replace("$", "");
  95. /**
  96. * 手机号码:
  97. * 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[6, 7, 8], 18[0-9], 170[0-9]
  98. * 移动号段: 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705
  99. * 联通号段: 130,131,132,155,156,185,186,145,176,1709
  100. * 电信号段: 133,153,180,181,189,177,1700
  101. */
  102. return Regex.IsMatch(value, @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|70)\d{8}$");
  103. }
  104. /// <summary>
  105. /// 是否存在手机号码
  106. /// </summary>
  107. /// <param name="value">值</param>
  108. /// <param name="isRestrict">是否按严格模式验证</param>
  109. /// <returns></returns>
  110. public static bool HasMobileNumberSimple(string value, bool isRestrict = false)
  111. {
  112. if (string.IsNullOrWhiteSpace(value))
  113. {
  114. return false;
  115. }
  116. string pattern = isRestrict ? @"[1][3-8]\d{9}" : @"[1]\d{10}";
  117. return Regex.IsMatch(value, pattern);
  118. }
  119. #endregion
  120. #region IsChinaMobilePhone(是否中国移动号码)
  121. /// <summary>
  122. /// 是否中国移动号码
  123. /// </summary>
  124. /// <param name="value">手机号码</param>
  125. /// <returns></returns>
  126. public static bool IsChinaMobilePhone(string value)
  127. {
  128. if (string.IsNullOrWhiteSpace(value))
  129. {
  130. return false;
  131. }
  132. /**
  133. * 中国移动:China Mobile
  134. * 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705
  135. */
  136. return Regex.IsMatch(value, @"(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\d{8}$)|(^1705\d{7}$)");
  137. }
  138. #endregion
  139. #region IsChinaUnicomPhone(是否中国联通号码)
  140. /// <summary>
  141. /// 是否中国联通号码
  142. /// </summary>
  143. /// <param name="value">手机号码</param>
  144. /// <returns></returns>
  145. public static bool IsChinaUnicomPhone(string value)
  146. {
  147. if (string.IsNullOrWhiteSpace(value))
  148. {
  149. return false;
  150. }
  151. /**
  152. * 中国联通:China Unicom
  153. * 130,131,132,155,156,185,186,145,176,1709
  154. */
  155. return Regex.IsMatch(value, @"(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\d{8}$)|(^1709\d{7}$)");
  156. }
  157. #endregion
  158. #region IsChinaTelecomPhone(是否中国电信号码)
  159. /// <summary>
  160. /// 是否中国电信号码
  161. /// </summary>
  162. /// <param name="value">手机号码</param>
  163. /// <returns></returns>
  164. public static bool IsChinaTelecomPhone(string value)
  165. {
  166. if (string.IsNullOrWhiteSpace(value))
  167. {
  168. return false;
  169. }
  170. /**
  171. * 中国电信:China Telecom
  172. * 133,153,180,181,189,177,1700
  173. */
  174. return Regex.IsMatch(value, @"(^1(33|53|77|8[019])\d{8}$)|(^1700\d{7}$)");
  175. }
  176. #endregion
  177. #region IsIdCard(是否身份证号码)
  178. /// <summary>
  179. /// 是否身份证号码
  180. /// </summary>
  181. /// <param name="value">身份证</param>
  182. /// <returns></returns>
  183. public static bool IsIdCard(string value)
  184. {
  185. if (string.IsNullOrWhiteSpace(value))
  186. {
  187. return false;
  188. }
  189. if (value.Length == 15)
  190. {
  191. return Regex.IsMatch(value, @"^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$");
  192. }
  193. return value.Length == 0x12 &&
  194. Regex.IsMatch(value, @"^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$",
  195. RegexOptions.IgnoreCase);
  196. }
  197. #endregion
  198. #region IsBase64String(是否Base64编码)
  199. /// <summary>
  200. /// 是否Base64编码
  201. /// </summary>
  202. /// <param name="value">Base64字符串</param>
  203. /// <returns></returns>
  204. public static bool IsBase64String(string value)
  205. {
  206. return Regex.IsMatch(value, @"[A-Za-z0-9\+\/\=]");
  207. }
  208. #endregion
  209. #region IsDate(是否日期)
  210. /// <summary>
  211. /// 是否日期
  212. /// </summary>
  213. /// <param name="value">日期字符串</param>
  214. /// <param name="isRegex">是否正则验证</param>
  215. /// <returns></returns>
  216. public static bool IsDate(string value, bool isRegex = false)
  217. {
  218. if (string.IsNullOrWhiteSpace(value))
  219. {
  220. return false;
  221. }
  222. if (isRegex)
  223. {
  224. //考虑到4年一度的366天,还有特殊的2月的日期
  225. return
  226. Regex.IsMatch(value,
  227. @"^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$");
  228. }
  229. DateTime minValue;
  230. return DateTime.TryParse(value, out minValue);
  231. }
  232. /// <summary>
  233. /// 是否日期
  234. /// </summary>
  235. /// <param name="value">日期字符串</param>
  236. /// <param name="format">格式化字符串</param>
  237. /// <returns></returns>
  238. public static bool IsDate(string value, string format)
  239. {
  240. return IsDate(value, format, null, DateTimeStyles.None);
  241. }
  242. /// <summary>
  243. /// 是否日期
  244. /// </summary>
  245. /// <param name="value">日期字符串</param>
  246. /// <param name="format">格式化字符串</param>
  247. /// <param name="provider">格式化提供者</param>
  248. /// <param name="styles">日期格式</param>
  249. /// <returns></returns>
  250. public static bool IsDate(string value, string format, IFormatProvider provider, DateTimeStyles styles)
  251. {
  252. if (string.IsNullOrWhiteSpace(value))
  253. {
  254. return false;
  255. }
  256. DateTime minValue;
  257. return DateTime.TryParseExact(value, format, provider, styles, out minValue);
  258. }
  259. #endregion
  260. #region IsDateTime(是否有效时间)
  261. /// <summary>
  262. /// 是否大于最小时间
  263. /// </summary>
  264. /// <param name="value">时间</param>
  265. /// <param name="min">最小时间</param>
  266. /// <returns></returns>
  267. public static bool IsDateTimeMin(string value, DateTime min)
  268. {
  269. if (string.IsNullOrWhiteSpace(value))
  270. {
  271. return false;
  272. }
  273. DateTime dateTime;
  274. if (DateTime.TryParse(value, out dateTime))
  275. {
  276. if (DateTime.Compare(dateTime, min) >= 0)
  277. {
  278. return true;
  279. }
  280. }
  281. return false;
  282. }
  283. /// <summary>
  284. /// 是否小于最大时间
  285. /// </summary>
  286. /// <param name="value">时间</param>
  287. /// <param name="max">最大时间</param>
  288. /// <returns></returns>
  289. public static bool IsDateTimeMax(string value, DateTime max)
  290. {
  291. if (string.IsNullOrWhiteSpace(value))
  292. {
  293. return false;
  294. }
  295. DateTime dateTime;
  296. if (DateTime.TryParse(value, out dateTime))
  297. {
  298. if (DateTime.Compare(max, dateTime) >= 0)
  299. {
  300. return true;
  301. }
  302. }
  303. return false;
  304. }
  305. #endregion
  306. #region IsGuid(是否Guid)
  307. /// <summary>
  308. /// 是否Guid
  309. /// </summary>
  310. /// <param name="guid">Guid字符串</param>
  311. /// <returns></returns>
  312. public static bool IsGuid(string guid)
  313. {
  314. if (string.IsNullOrWhiteSpace(guid))
  315. {
  316. return false;
  317. }
  318. return Regex.IsMatch(guid, @"[A-F0-9]{8}(-[A-F0-9]{4}){3}-[A-F0-9]{12}|[A-F0-9]{32}", RegexOptions.IgnoreCase);
  319. }
  320. #endregion
  321. #region IsUrl(是否Url地址)
  322. /// <summary>
  323. /// 是否Url地址(统一资源定位)
  324. /// </summary>
  325. /// <param name="value">url地址</param>
  326. /// <returns></returns>
  327. public static bool IsUrl(string value)
  328. {
  329. if (string.IsNullOrWhiteSpace(value))
  330. {
  331. return false;
  332. }
  333. return
  334. Regex.IsMatch(value,
  335. @"^(http|https)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{1,10}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$",
  336. RegexOptions.IgnoreCase);
  337. }
  338. #endregion
  339. #region IsUri(是否Uri)
  340. /// <summary>
  341. /// 是否Uri(统一资源标识)
  342. /// </summary>
  343. /// <param name="value">uri</param>
  344. /// <returns></returns>
  345. public static bool IsUri(string value)
  346. {
  347. if (string.IsNullOrWhiteSpace(value))
  348. {
  349. return false;
  350. }
  351. if (value.IndexOf(".", StringComparison.OrdinalIgnoreCase) == -1)
  352. {
  353. return false;
  354. }
  355. var schemes = new[]
  356. {
  357. "file",
  358. "ftp",
  359. "gopher",
  360. "http",
  361. "https",
  362. "ldap",
  363. "mailto",
  364. "net.pipe",
  365. "net.tcp",
  366. "news",
  367. "nntp",
  368. "telnet",
  369. "uuid"
  370. };
  371. bool hasValidSchema = false;
  372. foreach (string scheme in schemes)
  373. {
  374. if (hasValidSchema)
  375. {
  376. continue;
  377. }
  378. if (value.StartsWith(scheme, StringComparison.OrdinalIgnoreCase))
  379. {
  380. hasValidSchema = true;
  381. }
  382. }
  383. if (!hasValidSchema)
  384. {
  385. value = "http://" + value;
  386. }
  387. return Uri.IsWellFormedUriString(value, UriKind.Absolute);
  388. }
  389. #endregion
  390. #region IsMac(是否Mac地址)
  391. /// <summary>
  392. /// 是否Mac地址
  393. /// </summary>
  394. /// <param name="value">Mac地址</param>
  395. /// <returns></returns>
  396. public static bool IsMac(string value)
  397. {
  398. if (string.IsNullOrWhiteSpace(value))
  399. {
  400. return false;
  401. }
  402. return Regex.IsMatch(value, @"^([0-9A-F]{2}-){5}[0-9A-F]{2}$") || Regex.IsMatch(value, @"^[0-9A-F]{12}$");
  403. }
  404. #endregion
  405. #region IsPositiveInteger(是否大于0的正整数)
  406. /// <summary>
  407. /// 是否大于0的正整数
  408. /// </summary>
  409. /// <param name="value">正整数</param>
  410. /// <returns></returns>
  411. public static bool IsPositiveInteger(string value)
  412. {
  413. if (string.IsNullOrWhiteSpace(value))
  414. {
  415. return false;
  416. }
  417. return Regex.IsMatch(value, @"^[1-9]+\d*$");
  418. }
  419. #endregion
  420. #region IsInt32(是否Int32类型)
  421. /// <summary>
  422. /// 是否Int32类型
  423. /// </summary>
  424. /// <param name="value">整数</param>
  425. /// <returns></returns>
  426. public static bool IsInt32(string value)
  427. {
  428. if (string.IsNullOrWhiteSpace(value))
  429. {
  430. return false;
  431. }
  432. return Regex.IsMatch(value, @"^[0-9]*$");
  433. }
  434. #endregion
  435. #region IsDouble(是否Double类型,如果带有.默认为1位0)
  436. /// <summary>
  437. /// 是否Double类型
  438. /// </summary>
  439. /// <param name="value">小数</param>
  440. /// <returns></returns>
  441. public static bool IsDouble(string value)
  442. {
  443. if (string.IsNullOrWhiteSpace(value))
  444. {
  445. return false;
  446. }
  447. return Regex.IsMatch(value, @"^\d[.]?\d?$");
  448. }
  449. /// <summary>
  450. /// 是否Double类型
  451. /// </summary>
  452. /// <param name="value">小数</param>
  453. /// <param name="minValue">最小值</param>
  454. /// <param name="maxValue">最大值</param>
  455. /// <param name="digit">小数位数,如果是0则不检测</param>
  456. /// <returns></returns>
  457. public static bool IsDouble(string value, double minValue, double maxValue, int digit)
  458. {
  459. if (string.IsNullOrWhiteSpace(value))
  460. {
  461. return false;
  462. }
  463. string patten = string.Format(@"^\d[.]?\d{0}$", "{0,10}");
  464. if (digit > 0)
  465. {
  466. patten = string.Format(@"^\d[.]?\d{0}$", "{" + digit + "}");
  467. }
  468. if (Regex.IsMatch(value, patten))
  469. {
  470. double val = Convert.ToDouble(value);
  471. if (val >= minValue && val <= maxValue)
  472. {
  473. return true;
  474. }
  475. }
  476. return false;
  477. }
  478. #endregion
  479. #region IsPassword(是否密码格式)
  480. /// <summary>
  481. /// 是否密码One的格式,6-25位包含特殊字符
  482. /// </summary>
  483. /// <param name="value">密码</param>
  484. /// <returns></returns>
  485. public static bool IsPasswordOne(string value)
  486. {
  487. if (string.IsNullOrWhiteSpace(value))
  488. {
  489. return false;
  490. }
  491. return Regex.IsMatch(value, @"^[\@A-Za-z0-9\!\#\$\%\^\&\*\.\~_]{6,25}$");
  492. }
  493. /// <summary>
  494. /// 是否密码One的格式,指定密码长度,包含特殊字符
  495. /// </summary>
  496. /// <param name="value">密码</param>
  497. /// <param name="min">最小长度</param>
  498. /// <param name="max">最大长度</param>
  499. /// <returns></returns>
  500. public static bool IsPasswordOne(string value, int min, int max)
  501. {
  502. if (string.IsNullOrWhiteSpace(value))
  503. {
  504. return false;
  505. }
  506. return Regex.IsMatch(value, string.Format(@"^[\@A-Za-z0-9\!\#\$\%\^\&\*\.\~_]{0},{1}$", "{" + min, max + "}"));
  507. }
  508. /// <summary>
  509. /// 是否密码Two的格式,6-25位包含特殊字符
  510. /// </summary>
  511. /// <param name="value">密码</param>
  512. /// <returns></returns>
  513. public static bool IsPasswordTwo(string value)
  514. {
  515. if (string.IsNullOrWhiteSpace(value))
  516. {
  517. return false;
  518. }
  519. return
  520. Regex.IsMatch(value,
  521. @"(?=^.{6,25}$)(?=(?:.*?\d){1})(?=.*[a-z])(?=(?:.*?[A-Z]){1})(?=(?:.*?[!@#$%*()_+^&}{:;?.]){1})(?!.*\s)[0-9a-zA-Z!@#$%*()_+^&]*$");
  522. }
  523. #endregion
  524. #region IsLoginName(是否登录账号)
  525. /// <summary>
  526. /// 是否登录账号,6-30位长度
  527. /// </summary>
  528. /// <param name="value">登录账号</param>
  529. /// <returns></returns>
  530. public static bool IsLoginName(string value)
  531. {
  532. if (string.IsNullOrWhiteSpace(value))
  533. {
  534. return false;
  535. }
  536. return Regex.IsMatch(value, @"^(?![^a-zA-Z]+$)[A-Za-z0-9]{6,30}$");
  537. }
  538. /// <summary>
  539. /// 是否登录账号
  540. /// </summary>
  541. /// <param name="value">登录账号</param>
  542. /// <param name="min">最小长度</param>
  543. /// <param name="max">最大长度</param>
  544. /// <returns></returns>
  545. public static bool IsLoginName(string value, int min, int max)
  546. {
  547. if (string.IsNullOrWhiteSpace(value))
  548. {
  549. return false;
  550. }
  551. return Regex.IsMatch(value, string.Format(@"^(?![^a-zA-Z]+$)[A-Za-z0-9]{0},{1}$", "{" + min, max + "}"));
  552. }
  553. #endregion
  554. #region IsBankCard(是否银行卡号)
  555. /// <summary>
  556. /// 是否银行卡号,16位或19位银行卡(简单校验)
  557. /// </summary>
  558. /// <param name="value">银行卡号</param>
  559. /// <returns></returns>
  560. public static bool IsBandCard(string value)
  561. {
  562. if (string.IsNullOrWhiteSpace(value))
  563. {
  564. return false;
  565. }
  566. return Regex.IsMatch(value, @"^(\d{16}|\d{19})$");
  567. }
  568. #endregion
  569. #region IsSafeSqlString(是否安全Sql语句)
  570. /// <summary>
  571. /// 是否安全Sql语句
  572. /// </summary>
  573. /// <param name="value">sql语句</param>
  574. /// <returns></returns>
  575. public static bool IsSafeSqlString(string value)
  576. {
  577. if (string.IsNullOrWhiteSpace(value))
  578. {
  579. return false;
  580. }
  581. return !Regex.IsMatch(value, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
  582. }
  583. #endregion
  584. #region IsVersion(是否有效的版本号)
  585. /// <summary>
  586. /// 是否有效版本号,范例:1.3,1.1.5,1.25.256
  587. /// </summary>
  588. /// <param name="value">版本号</param>
  589. /// <param name="length">长度</param>
  590. /// <returns></returns>
  591. public static bool IsVersion(string value, int length = 5)
  592. {
  593. if (string.IsNullOrWhiteSpace(value))
  594. {
  595. return false;
  596. }
  597. value = value.Replace("^", "").Replace("$", "");
  598. return Regex.IsMatch(value, string.Format(@"^{0}{1}{2}$", @"\d{0,4}\.(\d{1,4}\.){0,", length, @"}\d{1,4}"));
  599. }
  600. #endregion
  601. #region IsContainsChinese(是否包含中文)
  602. /// <summary>
  603. /// 是否中文
  604. /// </summary>
  605. /// <param name="value">中文</param>
  606. /// <returns></returns>
  607. public static bool IsChinese(string value)
  608. {
  609. if (string.IsNullOrWhiteSpace(value))
  610. {
  611. return false;
  612. }
  613. return Regex.IsMatch(value, @"^[\u4e00-\u9fa5]+$", RegexOptions.IgnoreCase);
  614. }
  615. /// <summary>
  616. /// 是否包含中文
  617. /// </summary>
  618. /// <param name="value">中文</param>
  619. /// <returns></returns>
  620. public static bool IsContainsChinese(string value)
  621. {
  622. if (string.IsNullOrWhiteSpace(value))
  623. {
  624. return false;
  625. }
  626. return Regex.IsMatch(value, @"[\u4e00-\u9fa5]+", RegexOptions.IgnoreCase);
  627. }
  628. #endregion
  629. #region IsContainsNumber(是否包含数字)
  630. /// <summary>
  631. /// 是否包含数字
  632. /// </summary>
  633. /// <param name="value">数字</param>
  634. /// <returns></returns>
  635. public static bool IsContainsNumber(string value)
  636. {
  637. if (string.IsNullOrWhiteSpace(value))
  638. {
  639. return false;
  640. }
  641. return Regex.IsMatch(value, @"[0-9]+");
  642. }
  643. #endregion
  644. #region IsMainDomain(是否主域名)
  645. /// <summary>
  646. /// 是否主域名或者www开头的域名
  647. /// </summary>
  648. /// <param name="value">url地址</param>
  649. /// <returns></returns>
  650. public static bool IsMainDomain(string value)
  651. {
  652. if (string.IsNullOrWhiteSpace(value))
  653. {
  654. return false;
  655. }
  656. return
  657. Regex.IsMatch(value,
  658. @"^http(s)?\://((www.)?[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{1,10}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$");
  659. }
  660. #endregion
  661. #region IsMobileUser(是否手机用户)
  662. /// <summary>
  663. /// 是否手机用户
  664. /// </summary>
  665. /// <param name="context">上下文</param>
  666. /// <returns></returns>
  667. //public static bool IsMobileUser(HttpContext context = null)
  668. //{
  669. // if (context == null)
  670. // {
  671. // context = HttpContext.Current;
  672. // }
  673. // if (context != null)
  674. // {
  675. // if (context.Request.Browser.IsMobileDevice)
  676. // {
  677. // return true;
  678. // }
  679. // if (!string.IsNullOrWhiteSpace(context.Request.UserAgent))
  680. // {
  681. // return
  682. // Regex.IsMatch(context.Request.UserAgent,
  683. // @"(iemobile|iphone|ipod|android|nokia|sonyericsson|blackberry|samsung|sec\-|windows ce|motorola|mot\-|up.b|midp\-)",
  684. // RegexOptions.IgnoreCase | RegexOptions.Compiled);
  685. // }
  686. // }
  687. // return false;
  688. //}
  689. #endregion
  690. #region IsIpAddress(是否IP地址)
  691. /// <summary>
  692. /// 是否IP地址
  693. /// </summary>
  694. /// <param name="value">ip地址</param>
  695. /// <returns>结果</returns>
  696. public static bool IsIpAddress(string value)
  697. {
  698. if (string.IsNullOrWhiteSpace(value))
  699. {
  700. return false;
  701. }
  702. return Regex.IsMatch(value, @"^(\d(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\d\.){3}\d(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\d$");
  703. }
  704. #endregion
  705. #region IsInteger(是否整数)
  706. /// <summary>
  707. /// 是否整数
  708. /// </summary>
  709. /// <param name="value">值</param>
  710. /// <returns>结果</returns>
  711. public static bool IsInteger(string value)
  712. {
  713. if (string.IsNullOrWhiteSpace(value))
  714. {
  715. return false;
  716. }
  717. return Regex.IsMatch(value, @"^\-?[0-9]+$");
  718. }
  719. #endregion
  720. #region IsUnicode(是否Unicode字符串)
  721. /// <summary>
  722. /// 是否Unicode字符串
  723. /// </summary>
  724. /// <param name="value">unicode字符串</param>
  725. /// <returns>结果</returns>
  726. public static bool IsUnicode(string value)
  727. {
  728. if (string.IsNullOrWhiteSpace(value))
  729. {
  730. return false;
  731. }
  732. return
  733. Regex.IsMatch(value,
  734. @"^(http|https|ftp|rtsp|mms):(\/\/|\\\\)[A-Za-z0-9%\-_@]+\.[A-Za-z0-9%\-_@]+[A-Za-z0-9\.\/=\?%\-&_~`@:\+!;]*$");
  735. }
  736. #endregion
  737. #region IsLengthStr(字符串长度是否在指定范围内)
  738. /// <summary>
  739. /// 字符串长度是否在指定范围内,一个中文为2个字符
  740. /// </summary>
  741. /// <param name="value">字符串</param>
  742. /// <param name="begin">开始</param>
  743. /// <param name="end">结束</param>
  744. /// <returns></returns>
  745. public static bool IsLengthStr(string value, int begin, int end)
  746. {
  747. int length = Regex.Replace(value, @"[^\x00-\xff]", "OK").Length;
  748. if ((length <= begin) && (length >= end))
  749. {
  750. return false;
  751. }
  752. return true;
  753. }
  754. #endregion
  755. #region IsTel(是否中国电话)
  756. /// <summary>
  757. /// 是否中国电话,格式:010-85849685
  758. /// </summary>
  759. /// <param name="value">电话</param>
  760. /// <returns></returns>
  761. public static bool IsTel(string value)
  762. {
  763. if (string.IsNullOrWhiteSpace(value))
  764. {
  765. return false;
  766. }
  767. return Regex.IsMatch(value, @"^\d{3,4}-?\d{6,8}$", RegexOptions.IgnoreCase);
  768. }
  769. #endregion
  770. #region IsPostalCode(是否邮政编码)
  771. /// <summary>
  772. /// 是否邮政编码,6位数字
  773. /// </summary>
  774. /// <param name="value">邮政编码</param>
  775. /// <returns></returns>
  776. public static bool IsPostalCode(string value)
  777. {
  778. if (string.IsNullOrWhiteSpace(value))
  779. {
  780. return false;
  781. }
  782. return Regex.IsMatch(value, @"^[1-9]\d{5}$", RegexOptions.IgnoreCase);
  783. }
  784. #endregion
  785. #region IsNormalChar(是否正常字符,字母、数字、下划线的组合)
  786. /// <summary>
  787. /// 是否正常字符,字母、数字、下划线的组合
  788. /// </summary>
  789. /// <param name="value">字符串</param>
  790. /// <returns></returns>
  791. public static bool IsNormalChar(string value)
  792. {
  793. if (string.IsNullOrWhiteSpace(value))
  794. {
  795. return false;
  796. }
  797. return Regex.IsMatch(value, @"[\w\d_]+", RegexOptions.IgnoreCase);
  798. }
  799. #endregion
  800. #region IsPostfix(是否指定后缀)
  801. /// <summary>
  802. /// 是否指定后缀
  803. /// </summary>
  804. /// <param name="value">字符串</param>
  805. /// <param name="postfixs">后缀名数组</param>
  806. /// <returns></returns>
  807. public static bool IsPostfix(string value, string[] postfixs)
  808. {
  809. if (string.IsNullOrWhiteSpace(value))
  810. {
  811. return false;
  812. }
  813. string postfix = string.Join("|", postfixs);
  814. return Regex.IsMatch(value, string.Format(@".(?i:{0})$", postfix));
  815. }
  816. #endregion
  817. #region IsDecimal(是否数字型)
  818. /// <summary>
  819. /// 是否数字型
  820. /// </summary>
  821. /// <param name="value">数字</param>
  822. /// <returns></returns>
  823. public static bool IsDecimal(string value)
  824. {
  825. if (string.IsNullOrWhiteSpace(value))
  826. {
  827. return false;
  828. }
  829. return Regex.IsMatch(value, @"^([0-9])[0-9]*(\.\w*)?$");
  830. }
  831. #endregion
  832. #region IsBase64(是否Base64字符串)
  833. /// <summary>
  834. /// 是否Base64字符串
  835. /// </summary>
  836. /// <param name="value">字符串</param>
  837. /// <returns></returns>
  838. public static bool IsBase64(string value)
  839. {
  840. if (value.Length % 4 != 0)
  841. {
  842. return false;
  843. }
  844. return Regex.IsMatch(value, @"^[A-Z0-9/+=]*$", RegexOptions.IgnoreCase);
  845. }
  846. #endregion
  847. #region IsRepeat(是否重复)
  848. /// <summary>
  849. /// 是否重复,范例:112,返回true
  850. /// </summary>
  851. /// <param name="value">值</param>
  852. /// <returns></returns>
  853. public static bool IsRepeat(string value)
  854. {
  855. if (string.IsNullOrWhiteSpace(value))
  856. {
  857. return false;
  858. }
  859. var array = value.ToCharArray();
  860. return array.Any(c => array.Count(t => t == c) > 1);
  861. }
  862. #endregion
  863. #region IsQQ(是否合法QQ号码)
  864. /// <summary>
  865. /// 是否合法QQ号码
  866. /// </summary>
  867. /// <param name="value">QQ号码</param>
  868. /// <returns></returns>
  869. // ReSharper disable once InconsistentNaming
  870. public static bool IsQQ(string value)
  871. {
  872. if (string.IsNullOrWhiteSpace(value))
  873. {
  874. return false;
  875. }
  876. return Regex.IsMatch(value, @"^[1-9][0-9]{4,9}$");
  877. }
  878. #endregion
  879. }
  880. }