toolsValidate.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. /* eslint-disable no-useless-escape */
  2. /**
  3. * 验证百分比(不可以小数)
  4. * @param val 当前值字符串
  5. * @returns 返回处理后的字符串
  6. */
  7. export function verifyNumberPercentage(val: string): string {
  8. // 匹配空格
  9. let v = val.replace(/(^\s*)|(\s*$)/g, '');
  10. // 只能是数字和小数点,不能是其他输入
  11. v = v.replace(/[^\d]/g, '');
  12. // 不能以0开始
  13. v = v.replace(/^0/g, '');
  14. // 数字超过100,赋值成最大值100
  15. v = v.replace(/^[1-9]\d\d{1,3}$/, '100');
  16. // 返回结果
  17. return v;
  18. }
  19. /**
  20. * 验证百分比(可以小数)
  21. * @param val 当前值字符串
  22. * @returns 返回处理后的字符串
  23. */
  24. export function verifyNumberPercentageFloat(val: string): string {
  25. let v = verifyNumberIntegerAndFloat(val);
  26. // 数字超过100,赋值成最大值100
  27. v = v.replace(/^[1-9]\d\d{1,3}$/, '100');
  28. // 超过100之后不给再输入值
  29. v = v.replace(/^100\.$/, '100');
  30. // 返回结果
  31. return v;
  32. }
  33. /**
  34. * 小数或整数(不可以负数)
  35. * @param val 当前值字符串
  36. * @returns 返回处理后的字符串
  37. */
  38. export function verifyNumberIntegerAndFloat(val: string) {
  39. // 匹配空格
  40. let v = val.replace(/(^\s*)|(\s*$)/g, '');
  41. // 只能是数字和小数点,不能是其他输入
  42. v = v.replace(/[^\d.]/g, '');
  43. // 以0开始只能输入一个
  44. v = v.replace(/^0{2}$/g, '0');
  45. // 保证第一位只能是数字,不能是点
  46. v = v.replace(/^\./g, '');
  47. // 小数只能出现1位
  48. v = v.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.');
  49. // 小数点后面保留2位
  50. v = v.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');
  51. // 返回结果
  52. return v;
  53. }
  54. /**
  55. * 正整数验证
  56. * @param val 当前值字符串
  57. * @returns 返回处理后的字符串
  58. */
  59. export function verifiyNumberInteger(val: string) {
  60. // 匹配空格
  61. let v = val.replace(/(^\s*)|(\s*$)/g, '');
  62. // 去掉 '.' , 防止贴贴的时候出现问题 如 0.1.12.12
  63. v = v.replace(/[\.]*/g, '');
  64. // 去掉以 0 开始后面的数, 防止贴贴的时候出现问题 如 00121323
  65. v = v.replace(/(^0[\d]*)$/g, '0');
  66. // 首位是0,只能出现一次
  67. v = v.replace(/^0\d$/g, '0');
  68. // 只匹配数字
  69. v = v.replace(/[^\d]/g, '');
  70. // 返回结果
  71. return v;
  72. }
  73. /**
  74. * 检测正整数
  75. * @param val 当前值字符串
  76. * @returns 返回boolean
  77. */
  78. export function checkNumberInteger(val: string) {
  79. const rep = /[\.]/;
  80. return !!rep.test(val);
  81. }
  82. /**
  83. * 去掉中文及空格
  84. * @param val 当前值字符串
  85. * @returns 返回处理后的字符串
  86. */
  87. export function verifyCnAndSpace(val: string) {
  88. // 匹配中文与空格
  89. let v = val.replace(/[\u4e00-\u9fa5\s]+/g, '');
  90. // 匹配空格
  91. v = v.replace(/(^\s*)|(\s*$)/g, '');
  92. // 返回结果
  93. return v;
  94. }
  95. /**
  96. * 去掉英文及空格
  97. * @param val 当前值字符串
  98. * @returns 返回处理后的字符串
  99. */
  100. export function verifyEnAndSpace(val: string) {
  101. // 匹配英文与空格
  102. let v = val.replace(/[a-zA-Z]+/g, '');
  103. // 匹配空格
  104. v = v.replace(/(^\s*)|(\s*$)/g, '');
  105. // 返回结果
  106. return v;
  107. }
  108. /**
  109. * 禁止输入空格
  110. * @param val 当前值字符串
  111. * @returns 返回处理后的字符串
  112. */
  113. export function verifyAndSpace(val: string) {
  114. // 匹配空格
  115. const v = val.replace(/(^\s*)|(\s*$)/g, '');
  116. // 返回结果
  117. return v;
  118. }
  119. /**
  120. * 金额用 `,` 区分开
  121. * @param val 当前值字符串
  122. * @returns 返回处理后的字符串
  123. */
  124. export function verifyNumberComma(val: string) {
  125. // 调用小数或整数(不可以负数)方法
  126. let v: any = verifyNumberIntegerAndFloat(val);
  127. // 字符串转成数组
  128. v = v.toString().split('.');
  129. // \B 匹配非单词边界,两边都是单词字符或者两边都是非单词字符
  130. v[0] = v[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  131. // 数组转字符串
  132. v = v.join('.');
  133. // 返回结果
  134. return v;
  135. }
  136. /**
  137. * 匹配文字变色(搜索时)
  138. * @param val 当前值字符串
  139. * @param text 要处理的字符串值
  140. * @param color 搜索到时字体高亮颜色
  141. * @returns 返回处理后的字符串
  142. */
  143. export function verifyTextColor(val: string, text = '', color = 'red') {
  144. // 返回内容,添加颜色
  145. const v = text.replace(
  146. new RegExp(val, 'gi'),
  147. `<span style='color: ${color}'>${val}</span>`
  148. );
  149. // 返回结果
  150. return v;
  151. }
  152. /**
  153. * 数字转中文大写
  154. * @param val 当前值字符串
  155. * @param unit 默认:仟佰拾亿仟佰拾万仟佰拾元角分
  156. * @returns 返回处理后的字符串
  157. */
  158. export function verifyNumberCnUppercase(
  159. val: any,
  160. unit = '仟佰拾亿仟佰拾万仟佰拾元角分',
  161. v = ''
  162. ) {
  163. // 当前内容字符串添加 2个0,为什么??
  164. val += '00';
  165. // 返回某个指定的字符串值在字符串中首次出现的位置,没有出现,则该方法返回 -1
  166. const lookup = val.indexOf('.');
  167. // substring:不包含结束下标内容,substr:包含结束下标内容
  168. if (lookup >= 0) val = val.substring(0, lookup) + val.substr(lookup + 1, 2);
  169. // 根据内容 val 的长度,截取返回对应大写
  170. unit = unit.substr(unit.length - val.length);
  171. // 循环截取拼接大写
  172. for (let i = 0; i < val.length; i++) {
  173. v += '零壹贰叁肆伍陆柒捌玖'.substr(val.substr(i, 1), 1) + unit.substr(i, 1);
  174. }
  175. // 正则处理
  176. v = v
  177. .replace(/零角零分$/, '整')
  178. .replace(/零[仟佰拾]/g, '零')
  179. .replace(/零{2,}/g, '零')
  180. .replace(/零([亿|万])/g, '$1')
  181. .replace(/零+元/, '元')
  182. .replace(/亿零{0,3}万/, '亿')
  183. .replace(/^元/, '零元');
  184. // 返回结果
  185. return v;
  186. }
  187. /**
  188. * 手机号码
  189. * @param val 当前值字符串
  190. * @returns 返回 true: 手机号码正确
  191. */
  192. export function verifyPhone(val: string) {
  193. // false: 手机号码不正确
  194. if (
  195. !/^((12[0-9])|(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/.test(
  196. val
  197. )
  198. )
  199. return false;
  200. // true: 手机号码正确
  201. else return true;
  202. }
  203. /**
  204. * 国内电话号码
  205. * @param val 当前值字符串
  206. * @returns 返回 true: 国内电话号码正确
  207. */
  208. export function verifyTelPhone(val: string) {
  209. // false: 国内电话号码不正确
  210. if (!/\d{3}-\d{8}|\d{4}-\d{7}/.test(val)) return false;
  211. // true: 国内电话号码正确
  212. else return true;
  213. }
  214. /**
  215. * 登录账号 (字母开头,允许5-16字节,允许字母数字下划线)
  216. * @param val 当前值字符串
  217. * @returns 返回 true: 登录账号正确
  218. */
  219. export function verifyAccount(val: string) {
  220. // false: 登录账号不正确
  221. if (!/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/.test(val)) return false;
  222. // true: 登录账号正确
  223. else return true;
  224. }
  225. /**
  226. * 密码 (以字母开头,长度在6~16之间,只能包含字母、数字和下划线)
  227. * @param val 当前值字符串
  228. * @returns 返回 true: 密码正确
  229. */
  230. export function verifyPassword(val: string) {
  231. // false: 密码不正确
  232. if (!/^[a-zA-Z]\w{5,15}$/.test(val)) return false;
  233. // true: 密码正确
  234. else return true;
  235. }
  236. /**
  237. * 强密码 (字母+数字+特殊字符,长度在6-16之间)
  238. * @param val 当前值字符串
  239. * @returns 返回 true: 强密码正确
  240. */
  241. export function verifyPasswordPowerful(val: string) {
  242. // false: 强密码不正确
  243. if (
  244. !/^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&\.*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&\.*]+$)(?![\d!@#$%^&\.*]+$)[a-zA-Z\d!@#$%^&\.*]{6,16}$/.test(
  245. val
  246. )
  247. )
  248. return false;
  249. // true: 强密码正确
  250. else return true;
  251. }
  252. /**
  253. * 密码强度
  254. * @param val 当前值字符串
  255. * @description 弱:纯数字,纯字母,纯特殊字符
  256. * @description 中:字母+数字,字母+特殊字符,数字+特殊字符
  257. * @description 强:字母+数字+特殊字符
  258. * @returns 返回处理后的字符串:弱、中、强
  259. */
  260. export function verifyPasswordStrength(val: string) {
  261. let v = '';
  262. // 弱:纯数字,纯字母,纯特殊字符
  263. if (/^(?:\d+|[a-zA-Z]+|[!@#$%^&\.*]+){6,16}$/.test(val)) v = '弱';
  264. // 中:字母+数字,字母+特殊字符,数字+特殊字符
  265. if (
  266. /^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&\.*]+$)[a-zA-Z\d!@#$%^&\.*]{6,16}$/.test(
  267. val
  268. )
  269. )
  270. v = '中';
  271. // 强:字母+数字+特殊字符
  272. if (
  273. /^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&\.*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&\.*]+$)(?![\d!@#$%^&\.*]+$)[a-zA-Z\d!@#$%^&\.*]{6,16}$/.test(
  274. val
  275. )
  276. )
  277. v = '强';
  278. // 返回结果
  279. return v;
  280. }
  281. /**
  282. * IP地址
  283. * @param val 当前值字符串
  284. * @returns 返回 true: IP地址正确
  285. */
  286. export function verifyIPAddress(val: string) {
  287. // false: IP地址不正确
  288. if (
  289. !/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/.test(
  290. val
  291. )
  292. )
  293. return false;
  294. // true: IP地址正确
  295. else return true;
  296. }
  297. /**
  298. * 邮箱
  299. * @param val 当前值字符串
  300. * @returns 返回 true: 邮箱正确
  301. */
  302. export function verifyEmail(val: string) {
  303. // false: 邮箱不正确
  304. const reg =
  305. /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  306. if (!reg.test(val)) return false;
  307. // true: 邮箱正确
  308. else return true;
  309. }
  310. /**
  311. * 身份证
  312. * @param val 当前值字符串
  313. * @returns 返回 true: 身份证正确
  314. */
  315. export function verifyIdCard(val: string) {
  316. // false: 身份证不正确
  317. if (
  318. !/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(
  319. val
  320. )
  321. )
  322. return false;
  323. // true: 身份证正确
  324. else return true;
  325. }
  326. /**
  327. * 姓名
  328. * @param val 当前值字符串
  329. * @returns 返回 true: 姓名正确
  330. */
  331. export function verifyFullName(val: string) {
  332. // false: 姓名不正确
  333. if (!/^[\u4e00-\u9fa5]{1,6}(·[\u4e00-\u9fa5]{1,6}){0,2}$/.test(val))
  334. return false;
  335. // true: 姓名正确
  336. else return true;
  337. }
  338. /**
  339. * 邮政编码
  340. * @param val 当前值字符串
  341. * @returns 返回 true: 邮政编码正确
  342. */
  343. export function verifyPostalCode(val: string) {
  344. // false: 邮政编码不正确
  345. if (!/^[1-9][0-9]{5}$/.test(val)) return false;
  346. // true: 邮政编码正确
  347. else return true;
  348. }
  349. /**
  350. * url 处理
  351. * @param val 当前值字符串
  352. * @returns 返回 true: url 正确
  353. */
  354. export function verifyUrl(val: string) {
  355. // false: url不正确
  356. // !/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(
  357. // val
  358. // )
  359. if (
  360. !/^(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?$/.test(
  361. val
  362. )
  363. )
  364. return false;
  365. // true: url正确
  366. else return true;
  367. }
  368. /**
  369. * 车牌号
  370. * @param val 当前值字符串
  371. * @returns 返回 true:车牌号正确
  372. */
  373. export function verifyCarNum(val: string) {
  374. // false: 车牌号不正确
  375. if (
  376. !/^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/.test(
  377. val
  378. )
  379. )
  380. return false;
  381. // true:车牌号正确
  382. else return true;
  383. }