toolsValidate.ts 11 KB

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